我试图为我写的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
命名空间,也没有错误。
有没有办法在我的个人"类"中避免这个错误?文件,或者我应该忽略它们?
答案 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
,以便您可以使用类型注释和类型断言来按摩类型.ts
。