打字稿:为什么未定义为字符串未知会导致未定义?

时间:2019-05-22 03:54:52

标签: typescript

我的印象是,对字符串的类型断言将导致以前未知的类型转变为字符串。对于为什么不是这种情况,我表示感谢。

$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

1 个答案:

答案 0 :(得分:1)

来自docs on type assertion

  

类型断言与强制转换

     

之所以不称为“类型转换”的原因是,转换通常意味着某种运行时支持。但是,类型断言纯粹是一种编译时结构,是您向编译器提供有关如何分析代码的提示的一种方式。

这意味着foo as string将使TypeScript编译器将 foo作为字符串进行处理,即使不是也是如此。具体来说,TS编译器认为undefined不会神奇地变成非undefined

但是,TypeScript还知道,不是字符串的事物很少会被明智地视为字符串,因此会出现错误(除非您欺骗它忘记了它的初衷)。