Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗口类型==";“未定义”;使用ts节点时引发错误_Javascript_Node.js_Typescript_Typeof_Ts Node - Fatal编程技术网

Javascript 窗口类型==";“未定义”;使用ts节点时引发错误

Javascript 窗口类型==";“未定义”;使用ts节点时引发错误,javascript,node.js,typescript,typeof,ts-node,Javascript,Node.js,Typescript,Typeof,Ts Node,我有一些代码,其中我使用typeof window==“undefined”检查是否存在浏览器环境。当我使用ts节点启动此代码时,我得到以下信息: typings/Console.ts:36:10 - error TS2304: Cannot find name 'window'. 36 typeof window == "undefined" ~~~~~~ AFAIKtypeof是一种可以安全地与未定义的变量一起使用的运算符,它在浏览器和NodeJS

我有一些代码,其中我使用
typeof window==“undefined”
检查是否存在浏览器环境。当我使用
ts节点
启动此代码时,我得到以下信息:

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

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

My
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"
        ]
    }
}
那么,有什么诀窍?
提前谢谢

尝试在tsconfig“DOM”中添加到lib

对于我来说,首先将变量声明为TypeScript是有效的,因此:

declare var window;

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

您可以尝试使用typeof(window | | undefined)=“undefined”尝试在tsconfig“DOM”@LukaKostic中添加到lib,这不会有帮助,因为
window
仍然没有定义。@kalit很好,不理解为什么,但它有帮助。看起来更像是一个bug,而不是预期的行为。非常感谢。将您的评论作为答案发布,让我将其标记为正确答案:)@Limbo,但只有“检查类型”已定义,而不是“对象”,可能稍后某个地方已定义你好,谢谢您的回答。不幸的是,当您的项目基本上是面向浏览器的,并且在源代码中有几个类似的条件时(例如,
typeof document!=“undefined”
typeof navigator!=“undefined”
,等等),这种方法就不好了。正如@kalit所回答的,可以通过将
“DOM”
添加到
“lib”中来解决这个问题“
属性
tsconfig.json
。一般来说,Typescript中的
typeof
操作符是无用的,因为它不允许您与完全未定义的变量一起使用,这与普通的JS
typeof
操作符不同。