2014-01-16 2 views
1

Только что начал играть с JayData lib. и хотите воспользоваться преимуществами TypeScript. я включил в моем VS2013 проекте следующих файлов: - jaydata.js - jaydata.d.ts - JayDataContext.js, созданный с JaySvcUtil - JayDataContext.d.ts, созданный с помощью (ст. 1.3.5) JaySvcUtilОшибки скомпилировать TypeScript с библиотекой JayData и сгенерированным кодом 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:\Users\robbin\documents\visual studio 2013\Projects\TypeScriptHTMLApp1\TypeScriptHTMLApp1\scripts\jaydata.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:\Users\robbin\documents\visual studio 2013\Projects\TypeScriptHTMLApp1\TypeScriptHTMLApp1\scripts\jaydatacontext.d.ts 1623 16 TypeScriptHTMLApp1 

Я думаю, что мне не хватает чего-то тривиального, но я не знаю, что. Может ли кто-нибудь мне помочь? Спасибо.

ответ

6

1) Интерфейс Object определен в 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.

+0

Спасибо, Джеффри. Модифицирование кода, как вы предложили, решило проблему. Чтобы избежать повторного выполнения тех же самых исправлений каждый раз, когда я создаю типизированный контекст данных, я проверял источники JaySvcUtil и выяснил, что он использует подход преобразования xsl как для генерации .js файлов .ts. Было просто изменить файл JayDataContextTypeScriptGenerator.xslt для реализации изменений. – user2062883

+0

Прохладный, я рад, что сработал. Вы должны отметить этот ответ как решение и, возможно, голосуйте за него. –

+0

извините, но кажется, что я не могу добавить голосование - моя репутация ниже 15 – user2062883