刚开始使用JayData lib.并希望获得TypeScript的好处。我在VS2013项目中包含了以下文件:- 杰达特.js- 杰达特JayDataContext.js,使用 JaySvcUtil 创建(v. 1.3.5)JayDataContext.d.ts,由JaySvcUtil创建
1) There is a compile error in jaydata.d.ts, line 2
interface IPromise<T> extends Object {
Error 1 Interface '$data.IPromise<T>' cannot extend interface 'Object':
Types of property 'valueOf' of types 'IPromise<T>' and 'Object' are incompatible:
Call signatures of types '() => any' and '() => Object' are incompatible. C:Usersrobbindocumentsvisual studio 2013ProjectsTypeScriptHTMLApp1TypeScriptHTMLApp1scriptsjaydata.d.ts 2 15 TypeScriptHTMLApp1
2)There are a lot of compile errors in JayDataContext.ts beacuse '$data.IPromise' it is not 'used' as generic type
Error 2 Generic type references must include all type arguments. C:Usersrobbindocumentsvisual studio 2013ProjectsTypeScriptHTMLApp1TypeScriptHTMLApp1scriptsjaydatacontext.d.ts 1623 16 TypeScriptHTMLApp1
我想我错过了一些琐碎的东西,但我不知道是什么。谁能帮我?谢谢。
1) 对象接口在 lib.d.ts 中定义,在最新版本中随着类型推断系统的总体收紧而略有变化。 只需更改 jaydata.d.ts,以便valueOf
返回一个Object
就可以解决了。
interface IPromise<T> extends Object {
then: {
(handler: (args: T) => void ): IPromise<any>;
(handler: (args: T) => any): IPromise<any>;
};
fail: {
(handler: (args: T) => void ): IPromise<any>;
(handler: (args: T) => any): IPromise<any>;
};
valueOf(): Object;
}
2)这是由相同的拧紧引起的。 以前,当有一个没有类型参数的泛型类型时,它会假设任何类型,现在它是一个错误,而不是做出这个假设。 如果您只是将其显式化,则代码将正常工作。 例如:
老:
var x: IPromise;
新增功能:
var x: IPromise<any>;
我的理解是,如果这些重大更改在 1.0 版本之后不会发生。