【发布时间】:2020-01-28 03:43:13
【问题描述】:
现在 Knockout 3.5.0 已经发布,我在使用 Knockout 3.5.0 提供的新类型定义结构进行编译时遇到问题。
通过执行以下操作,我能够让 Knockout 验证正确地与 3.5.0 中的新类型定义文件集成:
首先:在淘汰赛验证 index.d.ts 文件的顶部添加了一个导入:
import { Observable, ObservableArray, Computed, Static, SubscribableFunctions, ObservableExtenderOptions } from "knockout";
第二个:将 KnockoutObservable、KnockoutComputed 和 KnockoutObservableArray 引用更改为 Observable、Computed 和 ObservableArray
第三:将 Knockout 接口的扩展包装在声明模块“knockout”语句中: 导出接口 KnockoutValidationRuleDefinitions 扩展 ObservableExtenderOptions { }
declare module "knockout" {
interface Static {
validation: KnockoutValidationStatic;
validatedObservable<T>(initialValue?: T): Observable<T>;
applyBindingsWithValidation(viewModel: any, rootNode?: any, options?: KnockoutValidationConfiguration): void;
}
export interface SubscribableFunctions<T> {
isValid: Computed<boolean>;
isValidating: Observable<boolean>;
rules: ObservableArray<KnockoutValidationRule>;
isModified: Observable<boolean>;
error: Computed<string>;
setError(error: string): void;
clearError(): void;
}
}
这很好用,但是现在我在所有 .extend 调用上都遇到了编译错误,这些调用用要求标记了 observables。例如:
this.settings.name.extend({ required: true });
给出一个错误: 没有重载匹配此调用。
TS2769 TypeScript (TS) 没有重载匹配此调用。重载 1 个 2、,报如下错误。类型参数不可分配给 类型参数。对象字面量只能指定已知 属性,并且在类型中不存在。重载 2 of 2, 给出了 以下错误。类型的参数不能分配给参数 类型。对象字面量只能指定已知属性,并且确实 类型中不存在。
关于如何修改敲除验证 index.d.ts 文件以正确扩展 Knockout 的扩展方法的任何建议?
作为参考,用于敲除验证的 index.d.ts 文件是 here。
【问题讨论】:
标签: typescript knockout.js knockout-validation