你应该把as看作是一种抑制类型错误的方法;当您比编译器更了解某事物的类型时,或者当您出于方便而想对编译器撒谎时,可以使用它。因此,在第三个示例中使用as时没有出现类型错误并不奇怪;这就是as的本意。 真正的问题是为什么第二个示例会给出类型错误。本质上,这是因为在第三个示例中,推断类型与断言类型有一些重叠,而在第二个示例中,与断言类型没有重叠。as关键字的意思是告诉编译器一个类型的值实际上是另一个类型,但是如果两个类型没有重叠,那么编译器仍然会给出一个错误,因为您断言的不仅仅是false,而是逻辑上的impossible.* *迂腐的注释:从技术上讲,这两种类型完全没有重叠,因为带有空数组{example: []}的对象可分配给这两种类型。尽管如此,同样的理由仍然适用;如果类型有足够的重叠,编译器愿意“相信你的话”,但如果重叠太小,你可能会犯错误,编译器仍会给出错误。