【发布时间】:2021-06-15 05:51:34
【问题描述】:
假设我正在尝试创建一个变量类型,它采用 type 键,该键的类型为 string:有没有办法从键名为 type 并将其用作该类型声明中另一个键的类型? (不使用泛型)
例如,
type Variable = {
name: string;
required: boolean;
type: string;
defaultValue: Variable["type"];
}
const newWorkingVar: Variable = {
name: "count",
required: true,
type: "number",
defaultValue: 22 // This should work
}
const newErrorVar: Variable = {
name: "count",
required: true,
type: "number",
defaultValue: "test" // This should error
}
【问题讨论】:
-
你希望编译器如何理解字符串
"number"与number类型有任何关系?我想你可以建立一个映射,然后建立一个像this 这样的联合,但我不知道这是否是你要找的。您能否在最后解释一下括号中的“不使用泛型”要求?这有点像说“我有一罐汤要打开(不使用这个开罐器)”。这可能是可能的,但如果你能解释为什么你的用例排除了开罐器,呃,泛型,你会更幸运。 -
用例是拥有一个简单的 JSON 对象,该对象也可以在具有类型安全性的 Typescript 中进行编辑。我需要在 JSON 对象中设置类型(并读取该值),而不仅仅是将其用于类型安全。但是你的例子有效!感谢您的回答,它更通用但不如@Linda Paste 简洁
-
@jcalz 如果您发布您的解决方案并附上解释,这将有助于我,我敢肯定,其他人!
标签: angular typescript types casting type-conversion