【问题标题】:Check if variable is defined in Typescript?检查 Typescript 中是否定义了变量?
【发布时间】:2021-04-21 14:14:04
【问题描述】:

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

我正在尝试

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

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

Cannot find name 'variablename'

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

【问题讨论】:

标签: javascript typescript


【解决方案1】:

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

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

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

这根本不会改变发出的 JavaScript。它只是告诉编译器就像在作用域中有一个名为 variablenamevar 其类型为 string | undefined (在您的用例中,它可能是 string 以外的其他类型,但我需要一个示例)。换句话说,它假定您的 JavaScript 将在这种类型的 variablename 所在的上下文中运行。

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

Playground link to code

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 2015-05-01
    • 2012-01-20
    • 2021-10-03
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多