Я только что обновил Typescript с v2.3 до v2.4, и теперь он выдает ошибку в строках knockout.validation.d.ts:
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 пытается указать, что KnockoutSubscribeableFunctions теперь имеет дополнительных членов. Вот определение этого интерфейса в knockout.d.ts:
interface KnockoutSubscribableFunctions<T> {
[key: string]: KnockoutBindingHandler;
notifySubscribers(valueToWrite?: T, event?: string): void;
}
теперь компилятор жалуется:
Свойство "isValid" типа "KnockoutComputed" нельзя назначить строковому индексу типа "KnockoutBindingHandler".
Я не понимаю, почему он не видит эти новые значения как новые свойства в интерфейсе? почему он пытается сказать, что они должны сопоставить подписи индекса? Документы, похоже, указывают на то, что вы можете иметь подпись индекса и другие свойства в одном и том же интерфейсе.
Я взял начальное определение интерфейса на игровую площадку, и он даже пожаловался, что notifySubscribeers не может быть назначен на KnockoutBindingHandler.
С новым компилятором, как вы получите этот код для компиляции?
Пока что я использую метод грубой силы, чтобы заставить это скомпилировать, в котором я изменяю определение knockout.d.ts следующим образом:
interface KnockoutSubscribableFunctions<T> {
[key: string]: any;//KnockoutBindingHandler;
notifySubscribers(valueToWrite?: T, event?: string): void;
}