Typescript 为什么我可以将类型断言与诸如“false”之类的文本一起使用?

Typescript 为什么我可以将类型断言与诸如“false”之类的文本一起使用?,typescript,Typescript,在TypeScript中,我可以看到以下代码: const x = true as false; 所以我有一个常数x,值为true,类型为false。我原以为这样的直接断言应该是无效的,但令人惊讶的是它是有效的。例如,对于 有一个编译错误 将类型“number”转换为类型“false”可能是错误的,因为两种类型都没有充分重叠。如果这是有意的,请先将表达式转换为“未知” 我预计true和false也会出现类似的错误 为什么没有错误,有没有办法(像一些编译器选项)修复它?这是因为typescrip

在TypeScript中,我可以看到以下代码:

const x = true as false;
所以我有一个常数
x
,值为
true
,类型为
false
。我原以为这样的直接断言应该是无效的,但令人惊讶的是它是有效的。例如,对于

有一个编译错误

将类型“number”转换为类型“false”可能是错误的,因为两种类型都没有充分重叠。如果这是有意的,请先将表达式转换为“未知”

我预计
true
false
也会出现类似的错误


为什么没有错误,有没有办法(像一些编译器选项)修复它?

这是因为typescript会扩展类型本身。true和false确实重叠,它们都是布尔类型。
0和false不重叠,一个是数字,另一个是布尔值。

这不是强制转换,而是一个。你是在告诉编译器你知道得更好。@jonrsharpe,我知道,但在这种情况下,ts通常会要求向
unknown
any
添加额外的强制转换,但由于某种原因,这里没有;真与假是同一个本原type@jonrsharpe,实际上我不明白他们为什么要结束这个问题。这很有趣,但是:1。这不是常见的情况,您可以随时使用
false作为true。2.有更好的解决方案,我没有写。如果您想讨论该语言,请与维护人员讨论,但您会问为什么,这就是为什么。同时,不要编写不合逻辑的类型断言。没有机会修复吗?可能不是,这很奇怪,但另一种方法会强制进行双重强制转换。我认为,当你真的想将
true设置为false时,这是一种非常罕见的情况,在这种情况下使用双重强制转换也可以,不是吗?这是一种罕见的情况,除非不是这样。这些规则的作用不仅仅是将一个原语转换成另一个原语。此外,没有太多理由这样做。只有在声明硬编码时,才能保证断言的内容。
const x = 0 as false;