跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教关于 TypeScript 类型索引 & 推断的一个问题
未分類
28 10 月 2020

请教关于 TypeScript 类型索引 & 推断的一个问题

请教关于 TypeScript 类型索引 & 推断的一个问题

資深大佬 : vsomeone 2

目前我需要写一个类型,现在写的定义是:

interface IState {     something: number;     another: string; }  type HandlerFactory = (key: keyof IState) => (value: IState[key]) => void; 

也就是说,HandlerFactory 指的是一类函数,其唯一参数是 IState 对象的一个 key,返回一个新的函数,此函数的唯一参数类型应当对应 IState[key] 的类型(例如,handlerFactory('something') 生成一个函数,此函数的签名为 (value: number) => void )。

目前这样写,TypeScript 会报错 key 是一个值,此处把它作为类型来使用('key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?ts(2749))。我不太理解的是,为什么我已经限定了 key 的范围( keyof IState ),TS 仍然会有这样的报错。

希望大家帮忙解答~

大佬有話說 (4)

  • 主 資深大佬 : vsomeone

    我很好奇的是,在 (value: IState[key]) => void 这一部分,为什么 TS 将 key 先前的推断给忘记了,此处认定 key 的类型为 any 。
    当然更好奇的是,到底怎么写才能够达到我的目标

  • 資深大佬 : xiangwan

    type Hanlder = <K extends keyof IState>(k: K) => (v: IState[K]) => void;

  • 主 資深大佬 : vsomeone

    现在弄明白啦,应该这样写:

    type HandlerFactory<K extends keyof IState = keyof IState> = (key: K) => (value: IState[K]) => void;

  • 主 資深大佬 : vsomeone

    二的写法更好一点,不需要给默认值,我的这种写法还需要给一个泛型的默认值

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具