假设我有这样的东西:
type RecordsObject<T, K extends keyof T> = {
primaryKey: K;
data: Array<T>;
}
其中类型CCD_ 1必然是从类型CCD_。
我发现我经常遇到这样的问题:当我声明某个东西是这种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)
}
有没有某种语法可以说"自己解决这个问题"?
如果没有,是否有理由这样做?
您可以指定通用参数默认值。
type RecordsObject<T, K extends keyof T = keyof T> = {
primaryKey: K;
data: Array<T>;
}
游乐场