首页 > 解决方案 > 检查 Typescript 中是否定义了变量?

问题描述

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

我目前正在尝试

if (typeof variablename !== 'undefined') { /*do something here*/ }

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

Cannot find name 'variablename'

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

标签: javascripttypescript

解决方案


TypeScript 编译器不会让你访问它不知道的变量,因为大多数时候这种访问都是错误的。

如果您希望编译器相信这样的变量在范围内,您可以declare

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

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

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

Playground 代码链接


推荐阅读