我剛剛升級打字稿,現在是給我的knockout.validation.d.ts行錯誤:typescript編譯器錯誤? knockout.validation.d.ts不從V2.3到V2.4編譯了
interface KnockoutSubscribableFunctions<T> {
isValid: KnockoutComputed<boolean>;
isValidating: KnockoutObservable<boolean>;
rules: KnockoutObservableArray<KnockoutValidationRule>;
isModified: KnockoutObservable<boolean>;
error: KnockoutComputed<string>;
setError(error: string): void;
clearError(): void;
}
這裏,knockout.validation試圖表明KnockoutSubscribableFunctions現在有額外的成員。這裏是knockout.d.ts了這個接口的定義:
interface KnockoutSubscribableFunctions<T> {
[key: string]: KnockoutBindingHandler;
notifySubscribers(valueToWrite?: T, event?: string): void;
}
編譯器現在抱怨:
型「KnockoutComputed」的特性「的isValid」是不能分配給字符串索引類型「KnockoutBindingHandler」 。
我不明白爲什麼它沒有看到這些新值作爲界面中的新屬性?爲什麼它試圖說他們必須映射到索引簽名? docs似乎表明您可以在同一接口中擁有索引簽名和其他屬性。
我把接口的初始定義放到了操場上,它甚至抱怨notifySubscribers不能分配給KnockoutBindingHandler。
使用新的編譯器如何獲得此代碼進行編譯?
現在有一個強大的方法來獲得這個編譯。我改變了knockout.d.ts定義是:存在的,因爲在類型上的差異
interface KnockoutSubscribableFunctions<T> {
[key: string]: any;//KnockoutBindingHandler;
notifySubscribers(valueToWrite?: T, event?: string): void;
}
您在原始界面上單獨出現錯誤?還是有更多的代碼?我不明白爲什麼你會得到一個錯誤,除非你試圖將某些東西分配給'KnockoutSubscribableFunctions'類型的東西。 –
編譯器在knockout.d.ts中標記錯誤,即使它抱怨在knockout.validation.d.ts中定義的成員。這似乎與我的代碼無關。我將看到有關創建僅包含這兩個.d.ts文件的全新項目。但我的印象是,只有將這兩個文件放在一起纔會給我帶來錯誤。 –
哦,如果不明確,在2.3版本的編譯器中編譯得很好。我剛升級到2.4。1,並且在編譯相同的項目時沒有對該項目進行任何更改而出現此錯誤。 –