如何一般地键入一个 returns 对象数组的值数组的函数?
How to generically type a function that returns a value array of an object array?
我正在尝试键入一个函数,该函数 return 是一个通用对象数组的值数组(用于获取 table 的所有列值)。
class DataSource<T> {
constructor(private data: T[]) {}
public getColumnValues(column: keyof T): any[] { // this is the thing I don't know how to type!
return data.map(entry => entry[key]);
}
}
目标是拥有一个显示正确 return 值的通用签名。例如:getColumnValues('someDate')
应该是 Date[]
或 getColumnValues('someString')
作为 string[]
我试着搜索这个,但我可能无法正确表达我的问题...
您需要使 getColumnValues
成为通用函数,以便类型可以基于特定的 属性 而不仅仅是 T
的任何 属性。我们将 return 该键的属性数组。 K
是键,T[K]
是值,T[K][]
是值数组。
class DataSource<T> {
constructor(private data: T[]) {}
public getColumnValues<K extends keyof T>(column: K): T[K][] {
return this.data.map(entry => entry[column]);
}
}
当您调用该函数时,Typescript 能够推断 K
,因此它将 return 正确的类型。
const mySource = new DataSource([{id: 1, name: "John"}, {id: 2, name: "Susan"}]);
const names = mySource.getColumnValues('name'); // type is string[]
const ids = mySource.getColumnValues('id'); // type is number[]
我正在尝试键入一个函数,该函数 return 是一个通用对象数组的值数组(用于获取 table 的所有列值)。
class DataSource<T> {
constructor(private data: T[]) {}
public getColumnValues(column: keyof T): any[] { // this is the thing I don't know how to type!
return data.map(entry => entry[key]);
}
}
目标是拥有一个显示正确 return 值的通用签名。例如:getColumnValues('someDate')
应该是 Date[]
或 getColumnValues('someString')
作为 string[]
我试着搜索这个,但我可能无法正确表达我的问题...
您需要使 getColumnValues
成为通用函数,以便类型可以基于特定的 属性 而不仅仅是 T
的任何 属性。我们将 return 该键的属性数组。 K
是键,T[K]
是值,T[K][]
是值数组。
class DataSource<T> {
constructor(private data: T[]) {}
public getColumnValues<K extends keyof T>(column: K): T[K][] {
return this.data.map(entry => entry[column]);
}
}
当您调用该函数时,Typescript 能够推断 K
,因此它将 return 正确的类型。
const mySource = new DataSource([{id: 1, name: "John"}, {id: 2, name: "Susan"}]);
const names = mySource.getColumnValues('name'); // type is string[]
const ids = mySource.getColumnValues('id'); // type is number[]