【问题标题】:typeof window == "undefined" throws an error while using ts-nodetypeof window == "undefined" 在使用 ts-node 时抛出错误
【发布时间】:2020-05-18 13:55:12
【问题描述】:

我有一些代码在其中使用typeof window == "undefined" 来检查是否存在浏览器环境。当我使用ts-node 启动这段代码时,我得到了这个:

typings/Console.ts:36:10 - error TS2304: Cannot find name 'window'.

36      typeof window == "undefined"
               ~~~~~~

AFAIK typeof 是一种可以安全使用未定义变量的运算符,它在浏览器和 NodeJS 环境中都能很好地工作。但就我开始将它与ts-node 一起使用时,它开始抛出。

我的tsconfig.json

{
    "compilerOptions": {
        "module": "CommonJS",
        "target": "es5",
        "moduleResolution": "node",
        "baseUrl": "src",
        "allowSyntheticDefaultImports": true,
        "noImplicitAny": true,
        "strict": false,
        "sourceMap": true,
        "traceResolution": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "strictNullChecks": true,

        "allowJs": false,
        "declaration": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": true,
        "types": [ "node" ],
        "lib": [ "es6" ],
        "downlevelIteration": true,
        "resolveJsonModule": true,
        "typeRoots": [
            "../node_modules/@types"
        ]
    }
}

那么,有什么诀窍? 提前致谢!

【问题讨论】:

  • 你可以试试 typeof (window || undefined) == "undefined"
  • 尝试在 tsconfig "DOM" 中添加到 lib
  • @LukaKostic 这无济于事,因为 window 仍未定义。
  • @kalit 好吧,不明白为什么,但它有所帮助。看起来更像是一个错误而不是预期的行为。谢谢!发表您的评论作为答案,让我将其标记为正确答案:)
  • @Limbo 但是只定义了检查类型,而不是对象,也许稍后定义了

标签: javascript node.js typescript typeof ts-node


【解决方案1】:

尝试在 tsconfig "DOM" 中添加到 lib

【讨论】:

    【解决方案2】:

    对我来说,首先将变量声明为 TypeScript,所以:

    declare var window;
    
    if(typeof window == "undefined"){
    // code
    }
    

    【讨论】:

    • 您好,感谢您的回答。不幸的是,当您的项目基本上是面向浏览器的并且您在源中有几个类似的条件(例如typeof document != "undefined"typeof navigator != "undefined 等)时,这种方法并不好。正如@kalit 所回答的,可以通过将"DOM" 添加到tsconfig.json"lib" 属性来解决问题。
    • 一般来说,Typescript 中的 typeof 运算符是无用的,因为它不允许您使用完全未定义的变量,这与 vanilla JS typeof 运算符相反。
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2020-06-04
    • 2015-11-02
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多