keyof
是 TypeScript 中的一个类型查询运算符,它可以用于获取某个类型的所有键的联合。这个运算符非常有用,尤其是在你需要根据对象的键来创建类型安全的代码时。
例如,如果我们有一个接口 Person
如下:
typescriptinterface Person { name: string; age: number; }
使用 keyof Person
将会得到一个联合类型 "name" | "age"
。这意味着 TypeScript 会将 keyof Person
解析为这两个键的联合。
keyof
的一个常见用途是在函数中,用来指定某些参数只能是某个对象键的一部分。比如,我们可以创建一个函数来获取对象的属性值,同时确保传入的属性名确实是对象中的键:
typescriptfunction getPropertyValue<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } const person: Person = { name: "Alice", age: 25 }; const name = getPropertyValue(person, "name"); // 正确 const age = getPropertyValue(person, "age"); // 正确 // const location = getPropertyValue(person, "location"); // 这行会报错,因为 "location" 不是 `Person` 的一个键
在这个例子中,我们定义了一个泛型函数 getPropertyValue
,它接受一个对象 obj
和一个键 key
。键 key
必须属于对象 obj
的类型的键。这通过泛型约束 K extends keyof T
来实现,确保了类型安全。这种模式在实际开发中非常有用,尤其是当我们需要构建高度可重用且维护性好的库或API时。
2024年8月2日 13:55 回复