21 索引类型:获取索引类型和索引值类型
我们这里要讲的,可不是前面讲接口的时候讲的索引类型。在学习接口内容的时候,我们讲过可以指定索引的类型。而本小节我们讲的索引类型包含两个内容:索引类型查询和索引访问操作符。 3.8.1 索引类型查询操作符 keyof操作符,连接一个类型,会返回一个由这个类型的所有属性名组成的联合类型。来看例子: interface Info { name: string; age: number; } let infoProp: keyof Info; infoProp = "name"; infoProp = "age"; infoProp = "no"; // error 不能将类型“"no"”分配给类型“"name" | "age"” 通过例子可以看到,这里的keyof Info其实相当于"name" | “age”。通过和泛型结合使用,TS 就可以检查使用了动态属性名的代码: function getValue<T, K extends keyof T>(obj: T, names: K[]): T[K][] { // 这里使用泛型,并且约束泛型变量K的类型是"keyof T",也就是类型T的所有字段名组成的联合类型 return names.map(n => obj[n]); // 指定getValue的返回值类型为T[K][],即类型为T的值的属性值组成的数组 } const info = { name: "lison", age: 18 }; let values: string[] = getValue(info, ["name"]); values = getValue(info, ["age"]); // error 不能将类型“number[]”分配给类型“string[]” 3....