相关疑难解决方法(0)

如何在TypeScript中的`window`上显式设置新属性?

我通过显式设置属性来为我的对象设置全局命名空间window.

window.MyNamespace = window.MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)

TypeScript强调MyNamespace并抱怨:

属性'MyNamespace'在'window'类型的值上不存在任何"

我可以通过声明MyNamespace为环境变量并删除window显式来使代码工作,但我不想这样做.

declare var MyNamespace: any;

MyNamespace = MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)

我怎样才能window留在那里让TypeScript开心?

作为旁注,我发现TypeScript抱怨特别有趣,因为它告诉我这种window类型any绝对可以包含任何东西.

typescript

502
推荐指数
25
解决办法
27万
查看次数

在TypeScript中创建一个全局变量

在JavaScript中,我可以这样做:

 something = 'testing';
Run Code Online (Sandbox Code Playgroud)

然后在另一个文件中:

 if (something === 'testing')
Run Code Online (Sandbox Code Playgroud)

它将something被定义(只要它们以正确的顺序被调用).

我似乎无法弄清楚如何在TypeScript中做到这一点.

这就是我尝试过的.

在.d.ts文件中:

interface Window { something: string; }
Run Code Online (Sandbox Code Playgroud)

然后在我的main.ts文件中:

 window.something = 'testing';
Run Code Online (Sandbox Code Playgroud)

然后在另一个文件中:

 if (window.something  === 'testing')
Run Code Online (Sandbox Code Playgroud)

这很有效.但我希望能够失去window.它的一部分,让我的something全球化.有没有办法在TypeScript中做到这一点?

(如果有人感兴趣,我真的想为我的应用程序设置日志记录.我希望能够log.Debug从任何文件调用而无需导入和创建对象.)

typescript

64
推荐指数
9
解决办法
9万
查看次数

为什么不const和let语句在window对象上定义

让我们以以下代码为例:

const constVar = 'some string';
let letVar = 'some string';
var varVar = 'some string';

(function() {
  console.log(window.constVar); // prints undefined
  console.log(window.letVar); // prints undefined
  console.log(window.varVar); // prints 'some string'
})();
Run Code Online (Sandbox Code Playgroud)

根据constmdn声明的描述:

该声明创建一个常量,其范围可以在声明它的块的全局范围内或局部范围内。

let以同样的方式假设作品。

在这种情况下,“块”包含在全局范围内。我想这里的重要区别是,尽管const constVar“全局”可访问,但仍未在window对象上定义它。

这使我认为全局范围和window对象是完全不同的。最终导致2个问题。

  1. 为什么使用var关键字声明的变量定义在上,window而用const而声明的变量let却未定义在window

  2. “全局范围”和window浏览器提供给我们的对象之间有什么区别?

javascript

5
推荐指数
2
解决办法
1142
查看次数

如何将外部类型导入全局.d.ts文件

我正在使用Moment.js处理TypeScript项目中的日期时间对象。我想定义一个对象类型,该对象类型的键的类型值为Moment

但是,当我将以下内容添加到全局定义文件(test.d.ts)时,在项目中的任何位置都找不到该文件中的接口。

import { Moment } from 'moment';

interface Test {
  date: Moment;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在.ts.tsx文件中使用接口时,出现此TypeScript错误:

[at-loader] ./src/<examplefilename>.tsx:91:26 
    TS2304: Cannot find name 'Test'. 
Run Code Online (Sandbox Code Playgroud)

VSCode的TypeScript错误检查和TSLint均未显示该代码的任何问题。

如何从外部模块导入类型以在全局定义文件中使用?

momentjs typescript typescript2.0

4
推荐指数
3
解决办法
4749
查看次数

标签 统计

typescript ×3

javascript ×1

momentjs ×1

typescript2.0 ×1