创建带泛型返回类型的函数时的语法困惑
解读TypeScript中
T[K][]的语法含义 先拆解这个语法的两部分:
T[K]是TypeScript的索引访问类型,作用是获取泛型T中,键为K的属性对应的类型。比如你定义的Person类型里,若K是"name",T[K]就是string;若K是"age",T[K]就是number。- 末尾的
[]是数组类型标记,它作用在整个T[K]上,表示「由T[K]类型的元素组成的单层数组」,完全不是嵌套数组。
结合你的代码例子来看:
当你调用getUsers([{name: "Alice", age: 30, location: "NY"}], "name")时,K被推断为"name",T[K]就是string,所以函数的返回类型就是string[](字符串数组);如果传的key是"age",返回类型就变成number[](数字数组)。
另外注意你当前代码里的小问题:map回调里只做了console.log,没有返回值,这会导致函数实际返回undefined[],不符合你声明的返回类型。正确写法应该是返回users.map(user => user[key]),这样才会得到符合T[K][]类型的数组。
内容的提问来源于stack exchange,提问作者Joe Consterdine
相关产品推荐
相关产品推荐

