TypeScript正在为字符串文本进行简单的类型推理



我遇到了类型推断的问题,并试图创建尽可能小的可复制示例

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}

最新更新