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"
~~~~~~
AFAIKtypeof
是一种可以安全地与未定义的变量一起使用的运算符,它在浏览器和NodeJS环境中都能很好地工作。但当我开始将它与ts节点一起使用时,它开始抛出
Mytsconfig.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
操作符是无用的,因为它不允许您与完全未定义的变量一起使用,这与普通的JStypeof
操作符不同。