Appearance
索引类型
tsx
let person = {
name: 'musion',
age: 35
}
function getValues(person: any, keys: string[]) {
return keys.map((key) => person[key])
}
console.log(getValues(person, ['name', 'age'])) // ['musion', 35]
console.log(getValues(person, ['gender'])) // [undefined]问题:访问不存在的属性 gender 时未报错
解决:索引类型查询,索引访问 操作符
tsx
function getValues<T, K extends keyof T>(person: T, keys: K[]): T[K][] {
return keys.map((key) => person[key])
}
interface Person {
name: string
age: number
}
const person: Person = {
name: 'musion',
age: 35
}
getValues(person, ['name']) // ['musion']
getValues(person, ['gender']) // 报错:
// Argument of Type '"gender"[]' is not assignable to parameter of type '("name" | "age")[]'.
// Type "gender" is not assignable to type "name" | "age".K[]:用于约束 传入键名
T[K][]:取 属性 为 K 的数组