Sim*_*mon 2 types typescript union-types
我有一个对象(让它被冻结,这样打字稿可以更好地处理它的键):
const obj = Object.freeze({
'hello': 64,
'world': 20
}) as {[key: string]: number};
Run Code Online (Sandbox Code Playgroud)
现在我有一个功能,用户可以通过他们的键选择值:
const pick = (keys: Array<string>): Array<number> => {
const values = [];
for (const key of keys) {
// Check if object contains property-key
if (!(key in obj)) {
throw new Error(`There's no such key: ${key}`);
}
values.push(obj[key]);
}
return values;
};
Run Code Online (Sandbox Code Playgroud)
到目前为止看起来不错,并且在运行时运行时完美无缺,我检查用户是否传递了任何无效密钥。但是我如何告诉 TS 只能obj使用来自的密钥?
我可以做,Array<'hello' | 'world'>但每次我添加新属性时都需要更新它,obj这有点烦人。
相关问题,但它们似乎都使用类型,而我只有一个对象(如果有帮助,可以将其冻结):
type而我正在尝试从我的对象中构建一个类型)const obj = Object.freeze({
'hello': 64,
'world': 20
});
const pick = (keys: Array<keyof typeof obj>) {...}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经删除了,as {[key: string]: number};因为它正在扩大类型,你希望它严格。
接下来的事情是Array<keyof typeof obj>我在这里声明,我只接受来自obj.
Array<keyof typeof obj>动态评估到("hello" | "world")[],幸好,你希望它会反映在原来的每一次变化obj
| 归档时间: |
|
| 查看次数: |
2662 次 |
| 最近记录: |