面试题答案
一键面试在 TypeScript 中,可以通过索引类型实现类似功能。
- 实现方式 假设我们有一个对象类型定义,然后可以通过索引类型来动态访问属性。例如:
interface MyObject {
name: string;
age: number;
}
const myObj: MyObject = { name: 'John', age: 30 };
const key: keyof MyObject = 'name';
const value = myObj[key];
console.log(value); // 输出: John
这里keyof MyObject
获取MyObject
类型的所有键的联合类型,确保动态访问的键是对象实际拥有的键。
- 与 JavaScript 的不同 - 类型检查
- JavaScript:在 JavaScript 中,使用
obj[key]
时,只要key
是一个有效的字符串或符号,就可以访问属性,不会进行严格的类型检查。例如:
- JavaScript:在 JavaScript 中,使用
const obj = { name: 'John', age: 30 };
const key = 'address';
const value = obj[key];
console.log(value); // 输出: undefined,不会报错
这里即使对象obj
没有address
属性,代码也不会报错,只是返回undefined
。
- TypeScript:在 TypeScript 中,如果尝试使用对象不存在的键进行动态访问,会报错。例如:
interface MyObject {
name: string;
age: number;
}
const myObj: MyObject = { name: 'John', age: 30 };
const key: keyof MyObject = 'address'; // 这里会报错,因为 'address' 不是 MyObject 的键
const value = myObj[key];
TypeScript 会在编译时进行类型检查,确保动态访问的键在对象类型定义中有对应的属性,提高了代码的健壮性和可维护性。