【发布时间】:2020-04-02 17:34:54
【问题描述】:
我有一个对象(让它被冻结以便打字稿可以更好地处理它的键):
const obj = Object.freeze({
'hello': 64,
'world': 20
}) as {[key: string]: number};
现在我有一个功能,用户可以通过按键选择值:
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;
};
到目前为止,这看起来不错,并且在我检查用户是否传递了任何无效密钥的运行时完美运行。但是如何告诉 TS 只能使用来自obj 的键呢?
我可以使用Array<'hello' | 'world'>,但我需要在向obj 添加新属性时对其进行更新,这有点烦人。
相关问题,但它们似乎都使用类型,而我只有一个对象(如果有帮助,可以冻结):
- Make union type of objects from type keys(他有类型,我有对象)
-
get union type of object keys filtered by type of object value(与 1 基本相同,但他想要
type而我正在尝试构建一个类型 我的对象) - Get keys of union of objects in TypeScript(看起来不错,但他也有类型……)
【问题讨论】:
标签: typescript types union-types