是的,这与#10676有关。 以前,字符串文字只能在某些“文字上下文”中(例如在类型断言之后)才具有文字类型,而我们仅使用表达式的确切类型作为对象文字属性的推断类型。 现在,字符串文字始终具有文字类型,而在推断出可变位置(例如对象文字属性)时,我们将_widen_类型。 因此,在您的示例中,类型声明无效(a)因为字符串文字已经是文字类型,并且(b)因为我们在类型声明之后加宽了整个表达式的结果。
为了更好地向后兼容,我们可以考虑在初始化器表达式是类型断言时_not_扩展推断的类型。 毕竟,否则类型断言的意义是什么?
@ahejlsberg谢谢您的答复。
如果您在初始化器表达式是类型断言的情况下考虑_not_扩展推断的类型,那就太好了,并且同意-这就是类型断言的要点:)
没有它就会停止工作的另一个常见情况是:
function test(style: { align: 'left' | 'right', size: number }) {
}
const style = {
align: 'left' as 'left',
size: 5
}
test(style)
文字类型的语法https://github.com/Microsoft/TypeScript/issues/10195会有所帮助-但我不确定它是否会成为现实
非常感谢你所做的一切
@wallverb同意,最好使用_some_语法形式来指示您不需要显式声明类型就不需要扩展。 但是无论如何,出于向后兼容的原因,我们应该允许类型断言具有这种含义。
最有用的评论
@wallverb同意,最好使用_some_语法形式来指示您不需要显式声明类型就不需要扩展。 但是无论如何,出于向后兼容的原因,我们应该允许类型断言具有这种含义。