我在TypeScript中有一个简单的对象类型和一个由该对象中的所有键组成的对象,但不是相同的类型。我期望hasOwnProperty或hasOwn将类型缩小到类型键,但事实并非如此。下面是一个小例子,它总结了这个问题和我期望发生的事情:
type Example = {
foo: string;
bar: string;
}
type ExampleKeys = keyof Example;
// the type is Readonly to make sure there are no more extra keys in here later
const translation: Readonly<{[key in ExampleKeys]: string}> = {
foo: "oof",
bar: "rab",
};
function test(example: Example) {
for (const [key, _] of Object.entries(example)) {
if (translation.hasOwnProperty(key)) {
// I expect key to be of type ExampleKeys here
}
if (Object.hasOwn(translation, key)) {
// Tried with the new hasOwn method but didn't work too
}
}
}
一般来说,我希望迭代对象并只获取相关的键。我知道,由于结构类型,我可能会得到额外的属性,我试图远离它们,但我想知道如何做到这一点,而不复制键列表或进行Assert。我的翻译对象是需要的,感谢类型提示,我确保我不会犯错误,虽然我复制了那里的键,所以我想使用它是好的,但必须有一个更一般的方式,我希望至少。
1条答案
按热度按时间lnlaulya1#
在我看来,应该创建类型保护函数来缩小键的类型
然后在里面使用这个函数