jquery.unobtrusive-ajax.d.ts / jquery.validate.unobtrusive.d.ts任何人?

时间:2013-03-01 23:39:25

标签: typescript web-essentials

我正在尝试将我的app.js转换为app.ts,唯一缺少的是jquery.unobtrusive-ajax.js和/或jquery.validate.unobtrusive.js的.d文件。

当我使用tsc构建和编译时,它工作正常,但VS2012中的WebEssentials抱怨:

var $form = $('#myform');
$.validator.unobtrusive.parse($form); 

错误:

The property 'unobtrusive' does not exist on value of type 'Validator'

由于

3 个答案:

答案 0 :(得分:4)

如果您没有类型信息,并且编译器无法推断出类型,那么就会出现问题。

虽然您从命令行获取输出,但我仍然希望它会出错。 Web Essentials强制执行更强大的功能,这是工具背后的理念。

如果您无法获取类型信息(请检查GitHub上的Definitely Typed),您可以使用简化的定义修复错误...

interface JQueryStatic {
    validator: any;
}

如果你有一个验证器的定义,你可以使用这个技巧来声明不引人注目的,然后只有缺少类型信息而不是所有的验证器。

这将失去验证器的输入,但会修复错误。

取自http://www.stevefenton.co.uk/Content/Blog/Date/201301/Blog/Complex-TypeScript-Definitions-Made-Easy/

答案 1 :(得分:4)

为了说明我认为史蒂夫已经说过的话,如果你download the d.ts from DefinitelyTyped,并打开文件,你会看到Validator界面(以及其他定义)。扩展它很简单:

interface Validator {
    format(template: string, ...arguments: string[]): string;
    form(): bool;
    element(element: any): bool;
    resetForm(): void;
    showErrors(errors: any): void;
    numberOfInvalids(): number;
    setDefaults(defaults: ValidationOptions): void;
    addMethod(name: string, method: (value: any, element: any, ...params: any[]) => any, message?: any): void;
    addClassRules(rules: any): void;
    addClassRules(name: string, rules: any): void;

    // Just add the unobtrusive element to this (typed as `any` if you don't have time to do anything more)
    unobtrusive:any; 
}

扩展JQueryJQueryStatic接口的其余工作已经为您完成,文件中的其他位置。您不会在unobtrusive元素上获得任何类型的优点,但至少所有其余Validator代码都将进行类型检查。

答案 2 :(得分:0)

我通过强制转换来解决这个问题:

(<any>$.validator).unobtrusive.parse($form);

我喜欢打字稿但由于缺少定义文件而妨碍了它的使用。我想这是一件小事--Tsc工作得很好 - 但如果Visual Studio会抱怨像这样的简单事情,那么对很多人来说这将是一个问题。