t-M*_*URO 3 typescript typescript-generics typescript-typings
我正在尝试键入一个函数,该函数返回一个通用对象数组的值数组(用于获取表的所有列值)。
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
目标是拥有一个显示正确返回值的通用签名。例如:getColumnValues('someDate') 应该是 Date[]或getColumnValues('someString')作为 string[]
我尝试搜索这个,但我可能无法正确表达我的问题......
您需要创建getColumnValues一个泛型函数,以便类型可以基于特定属性,而不仅仅是T. 我们将返回该键的属性数组。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]);
}
}
Run Code Online (Sandbox Code Playgroud)
K当您调用该函数时,Typescript 能够进行推断,因此它将返回正确的类型。
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[]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |