我遇到了类型推断的问题,并试图创建尽可能小的可复制示例
type Options = { value: 'a' | 'b' }
const getOption = (): Options => {
const result = { value: 'a' };
return result;
}
错误
类型"{value:string;}"不可分配给类型"Options"。
__属性"value"的类型不兼容。
____类型"string"不可分配给类型";a"|"b〃’
(我不是在寻求解决方案。我想知道为什么TypeScript不能推断出这一点(
我可以在一次操作中返回结果而不会出现错误。我假设TypeScript正在推断result
变量的类型为{ value: string }
,而不是{ value: 'a' }
为了解决这个问题,我可以更改结果行,将字符串值强制转换为实际值,但这似乎太愚蠢了。。。。。
const result = { value: ('a' as 'a') };
问题
为什么这是必要的?我通常对TypeScript的类型推理的深度印象深刻,但出于某种原因,它正在努力解决这个简单的问题
您可以使用as const
断言:
type Options = { value: 'a' | 'b' }
const getOption = (): Options => {
const result = { value: 'a' } as const;
return result;
}
这将告诉编译器result
的类型是{value: "a"}
而不是{value: string}