【发布时间】:2021-02-20 23:33:15
【问题描述】:
假设我有这样的事情:
type RecordsObject<T, K extends keyof T> = {
primaryKey: K;
data: Array<T>;
}
其中K 类型必然派生自T 类型。
我发现我经常遇到一些问题,我声明某些东西是这种RecordsObject 类型,TypeScript 坚持我定义了两个泛型参数。
例如:
type Student = {
id: string;
name: string;
}
function processStudentRecords(records: RecordsObject<Student, keyof Student> ) {
const allPrimaryKeys = records.data.map(v => v[records.primaryKey]);
}
问题是 - 我不应该在这里声明第二个通用参数 - 我看不到我在这里添加任何其他信息。
但如果我把它关掉,我会得到:
function processStudentRecords(records: RecordsObject<Student> ) { //Generic type 'RecordsObject' requires 2 type argument(s).(2314)
const allPrimaryKeys = records.data.map(v => v[records.primaryKey]); //Parameter 'v' implicitly has an 'any' type.(7006)
}
是否有某种语法可以说“自己解决”?
如果不是,是否有原因导致这种情况?
【问题讨论】:
标签: typescript generics type-inference