我是一名有用的助手,可以为您翻译文本。
我喜欢TypeScript中的字符串文字联合类型。我遇到了一个简单的情况,我期望联合类型会被保留。
以下是一个简单的示例:
我喜欢TypeScript中的字符串文字联合类型。我遇到了一个简单的情况,我期望联合类型会被保留。
以下是一个简单的示例:
let foo = false;
const bar = foo ? 'foo' : 'bar';
const foobar = {
bar
}
bar
被正确地定义为 'foo' | 'bar'
类型:
但是,foobar.bar
被定义为 string
类型:
只是好奇为什么会这样。
更新
所以 @jcalz 和 @ggradnig 的观点都很好。但我意识到我的用例有一个额外的转折:
type Status = 'foo' | 'bar' | 'baz';
let foo = false;
const bar: Status = foo ? 'foo' : 'bar';
const foobar = {
bar
}
有趣的是,bar
确实具有 Status
类型。然而,foobar.bar
仍然具有 'foo' | 'bar'
类型。
似乎唯一让它按照我的预期行事的方法是将 'foo'
强制转换为 Status
,如下所示:
const bar = foo ? 'foo' as Status : 'bar';
在这种情况下,打字是正常工作的。我对此感到满意。