如果泛型参数是从另一个派生的,我可以省略它们吗



假设我有这样的东西:

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>; 
}

游乐场

最新更新