检查 Typescript 中是否定义了变量?

wen*_*dtl 2 javascript typescript

我正在尝试使用打字稿检查变量是否未定义,但没有任何运气。

我目前正在尝试

if (typeof variablename !== 'undefined') { /*do something here*/ }
Run Code Online (Sandbox Code Playgroud)

但由于某种原因编译器总是给我错误

Cannot find name 'variablename'
Run Code Online (Sandbox Code Playgroud)

我可以打开浏览器控制台并粘贴上面的代码,它会按预期工作。包含检查的文件undefined存在于未由任何其他 JS/TS 文件导入的文件中。

jca*_*alz 7

TypeScript 编译器不会让您访问它不知道的变量,因为大多数情况下此类访问都是错误的。

如果你想让编译器相信这样的变量在作用域内,你可以先declare这样做:

declare var variablename: string | undefined;
if (typeof variablename !== 'undefined') { /*do something here*/ }
Run Code Online (Sandbox Code Playgroud)

这根本不会改变发出的 JavaScript。它只是告诉编译器表现得好像范围内有一个var命名variablename的类型string | undefined(在您的用例中它可能是其他类型,string但我需要一个示例)。换句话说,它假设您的 JavaScript 将在存在variablename此类类型的上下文中运行。

这并不完全是您想要的,因为在运行时可能不存在这样的变量。不幸的是,没有办法告诉编译器该变量可能在范围内并且typeof可以用来检查它。变量要么在范围内(并且您可以访问它们),要么不在范围内(并且您不能访问它们)。microsoft/TypeScript#23602提出了一种有条件声明变量的方法,但没有任何结果。我认为,将变量声明为肯定存在但属于| undefined其中的类型是最接近的。

Playground 代码链接