gpt4 book ai didi

typescript - 是否可以在不显式为其键设置类型的情况下强制执行对象值的类型?

转载 作者:行者123 更新时间:2023-12-04 03:22:26 24 4
gpt4 key购买 nike

我想要这样的东西:

type Person = { age:number, weight: number}
const people:{[key:infer_the_type]:Person} = {
mike: {...},
bob: {...},
}

所以如果我这样做,它会起作用:

keyof typeof people // This should be "mike" | "bob"

这可能吗?

最佳答案

您无法通过 annotating 获得您正在寻找的行为的类型;一旦您使用(非联合)类型注释 people ,编译器将自动丢弃它拥有的关于初始化值的任何更具体的信息。 GitHub 中有一个(长期存在的)未解决问题,microsoft/TypeScript#7481它要求提供类似您的 infer_the_type 的内容(特别相关的是 microsoft/TypeScript#38349,它已作为重复项关闭)。如果您希望看到这种情况发生,您可能想解决该问题并给它一个 👍,但不清楚何时或是否会实现。

相反,您可以通过将类型注释替换为 generic 来获得类似的行为。辅助函数:

const asPeople = 
<K extends PropertyKey>(people: { [P in K]: Person }) => people;

const people = asPeople({
mike: { name: "Mike", weight: 150 },
bob: { name: "Bob", weight: 200 },
}); // okay

您可以验证编译器是否已推断出 people 的键:

/* const people: {
mike: Person;
bob: Person;
} */

如果你传递了一些意想不到的东西,辅助函数会报错:

const badPeople = asPeople({
alice: { name: "Alice", height: 75 } // error!
// -------------------> ~~~~~~~~~~
// Did you mean to write 'weight'?
})

Playground link to code

关于typescript - 是否可以在不显式为其键设置类型的情况下强制执行对象值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68231362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com