如何创建真实类的定义?

时间:2017-04-19 07:10:13

标签: typescript typescript2.0

如果我有课:

在文件" BigClass.ts":

class BigClass{
  /// a lot of properties and methods here, I mean, a lot
}
window['big'] = new BigClass();

我想在" Big.d.ts"中宣布全球一个:

declare let big:BigClass;

TS不允许我这样做,因为我只能使用.d文件中的接口定义声明的变量。

但是这个课程非常大,我不想为它创建一个界面,我会重复每一个道具和方法......有没有办法绕过它?

或者根据我不知道的现有类,还有另一种声明全局变量的方法吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的方法是将declare let big:BigClass;简单地放在BigClass.ts中,而不是放在d.ts文件中。这完全合法。

这假设BigClass.ts不是一个模块,这意味着它没有import \ export语句。如果它不是模块,其他文件也会“看到”声明语句。

然而,这是一个不好的做法,因为你转发了window碰巧是浏览器中的全局对象这一事实。

更好的方法:

//file: BigClass.ts

class BigClass{
}

interface Window {
  big: BigClass;
}
window.big = new BigClass();

由于模块真的非常适合使用,以下是使用模块执行此操作的方法:

//file: BigClass.ts

export class BigClass{
}
declare global {
  interface Window {
    big: BigClass;
  }
}
window.big = new BigClass();

答案 1 :(得分:0)

  

我想在" Big.d.ts"中宣布全球一个:

你为什么要这样做? 如果您将声明此类的任何实例,ts将已经知道该类的所有内容。 并且还要避免全局变量。 const big = new BigClass();