我的印象是,对字符串的类型断言将导致以前未知的类型转变为字符串。对于为什么不是这种情况,我表示感谢。
$npx ts-node
> undefined as string
[eval].ts:1:1 - error TS2352: Conversion of type 'undefined' to type 'string' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
> undefined as unknown as string
undefined
答案 0 :(得分:1)
类型断言与强制转换
之所以不称为“类型转换”的原因是,转换通常意味着某种运行时支持。但是,类型断言纯粹是一种编译时结构,是您向编译器提供有关如何分析代码的提示的一种方式。
这意味着foo as string
将使TypeScript编译器将 foo
作为字符串进行处理,即使不是也是如此。具体来说,TS编译器认为undefined
不会神奇地变成非undefined
。
但是,TypeScript还知道,不是字符串的事物很少会被明智地视为字符串,因此会出现错误(除非您欺骗它忘记了它的初衷)。