命名空间类的Typescript定义

时间:2015-07-07 21:43:20

标签: javascript typescript

我试图为我写的javascript库编写打字稿defs。该库看起来像:

!function() {
  var mylib = {};

  mylib.Fruit = function() {
    // ...
  };
  mylib.Fruit.SOME_STATIC_PROP = 1;

}();

源包含多个连接的文件 - 对于这个最小的示例,有一个文件包含前两行,一个文件带有Fruit,另一个带有最后一行。

fruit.d.ts:

declare module mylib {
  class Fruit {
    static SOME_STATIC_PROP: number;
  }
}

在fruit.js中(同样只是上面粘贴的代码的中间部分),Intellisense抱怨道:

  

输入'()=>任何'不能分配类型' typeof Fruit'。物业' SOME_STATIC_PROP'类型'()=>中缺少任何'

修改 在我的连锁文件中(例如上面粘贴的内容),我没有收到该消息。

如果我将fruit.js改为

function Fruit() { ... }

没有mylib命名空间,也没有错误。

有没有办法在我的个人"类"中避免这个错误?文件,或者我应该忽略它们?

2 个答案:

答案 0 :(得分:0)

我的猜测是你需要更新你的函数声明:

!function() {
  var mylib = {};

  mylib.Fruit = function():Fruit {
    // ...
  };
  mylib.Fruit.SOME_STATIC_PROP = 1;

}();

你没有告诉编译器函数返回什么,所以它假设它是'any'而且任何没有属性SOME_STATIC_PROP,但Fruit类型确实具有该属性。

告诉编译器函数返回的确切类型,它应该很高兴。

答案 1 :(得分:0)

  

在fruit.js中(同样只是上面粘贴的代码的中间部分),Intellisense抱怨

因为这是JavaScript,所以错误Type '() => any' is not assignable to type 'typeof Fruit'. Property 'SOME_STATIC_PROP' is missing in type '() => any'.基于变量的推断类型。

解决方案:

要么:

  • .js文件转换为.ts,以便您可以使用类型注释类型断言来按摩类型
  • 忽略错误是.js文件并继续前进,直到您有时间转换为.ts