这两段typescript类型定义应该怎么解释?

新手上路,请多包涵
type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T];

这段后面跟的[keyof T]是什么意思呢?

type BoxedValue<T> = { value: T };
type BoxedArray<T> = { array: T[] };
type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;

这段最后的BoxedArray<T[number]>中的T[number]是什么意思呢?

阅读 1.9k
1 个回答

这两个问题都是映射类型的知识:

  1. [keyof T][keyof T]前面是一个对象,[]表示索引, keyof T表示索引值是类型Tkey值,可以去查看一下keyof关键字用法
  2. T[number]:首先看前面,T extends any[]表示Tany[]的继承类型,所以T的索引是数字,所以才有T[number]。也就是T是数组时,包装的是数组的元素,T不是数组时,包装的就是值本身
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏