在最新的Breeze Typescript定义文件(https://github.com/borisyankov/DefinitelyTyped)中,缺少方法,特别是Validator.register和Validator.registerFactory方法。我想知道 - 这是故意的,出于某种原因吗?即使我可以编辑定义文件,我也不喜欢这样做,因为下载较新版本时我的更改会消失。有没有办法扩展定义文件?
答案 0 :(得分:3)
编辑:现在可以在Breeze v1.3.0
上使用我会将这些添加到下一个版本的Breeze,下周晚些时候。
作为旁注,可以在“TypeScript”目录中的每个版本的breeze zip文件中找到最新版本的breeze typescript定义文件。我们也尝试保持(https://github.com/borisyankov/DefinitelyTyped)更新,但可能有延迟,所以最好直接从最新的Breeze zip(或直接从GitHub)获取。
并指出这一点,如果你看到更多,请重新发布。
答案 1 :(得分:1)
回答:有没有办法扩展定义文件?
没有。 Validator被定义为一个类。类定义不是开放式的,因此以下内容无效:
declare class Validator {
static messageTemplates: any;
}
declare class Validator {
static register: any;
}
Validator被定义为一个类,因为Interfaces不支持静态方法。如果typescript支持接口上的静态成员,那么我们就可以做到:
interface Validator {
static messageTemplates: any;
constructor (name: string, validatorFn: ValidatorFunction, context?: any);
static bool(): Validator;
static byte(): Validator;
static date(): Validator;
static duration(): Validator;
getMessage(): string;
static guid(): Validator;
static int16(): Validator;
static int32(): Validator;
static int64(): Validator;
static maxLength(context: { maxLength: number; }): Validator;
static number(): Validator;
static required(): Validator;
static string(): Validator;
static stringLength(context: { maxLength: number; minLength: number; }): Validator;
validate(value: any, context?: any): ValidationError;
}
你可以简单地完成:
interface Validator {
register(); // Whatever your signature was
}
并且它会起作用,因为接口是开放式的。不幸的是,在定义文件中,它被定义为一个类,即class Validator
,这就是除了修改定义文件之外无法扩展它的原因。