我想Object.keys
使用打字稿映射类型定义更严格的函数。
例子:
假设我有一个定义为的对象const
:
const myObj = {
a: 'some value',
b: 5
};
当我Object.keys
在这个对象上使用时,返回类型是string[]
const keysOfMyObj = Object.keys(myObj); // `const keysOfMyObj: string[]`
问题:
相反,我希望这种类型更具体。string[]
我宁愿返回 type ,而不是Object.keys
返回 type ("a" | "b")[]
。
所需类型:
const newKeysOfMyObj = myKeys(myObj); // `const newKeysOfMyObj: ("a" | "b")[]`
我试过的:
我认为这可以使用typescript mapped types来完成。
我已经定义了一个类型,它断言一个类型是一个对象的值与键相同:
type Keys<T> = {
[P in keyof T]: P;
};
let myObjKeysOnly: Keys<typeof myObj>;
// resulting type:
// ```
// let myObjKeysOnly: {
// a: "a";
// b: "b";
// }
// ```
我试图将这个函数实现为一个类型化的包装器Object.keys
:
function myKeys<T>(obj: T) {
return Object.keys(obj) as (Keys<T>);
}
有任何想法吗?