Typescript jquery.unobtrusive-ajax.d.ts/jquery.validate.unobtrusive.d.ts有人吗?

Typescript jquery.unobtrusive-ajax.d.ts/jquery.validate.unobtrusive.d.ts有人吗?,typescript,web-essentials,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

我正在尝试将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'

谢谢

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

虽然您从命令行获得输出,但我仍然希望它给出一个错误。WebEssentials更有力地实施了一些东西,这就是工具背后的理念

如果您无法获取类型信息(请在GitHub上选中“确定键入”),您可以使用简化的定义修复错误

interface JQueryStatic {
    validator: any;
}
若您有一个验证器的定义,那个么您可以使用这个技巧来声明unobtrusive,这将只包含缺少的类型信息,而不是验证器的所有信息

这将丢失在验证器上的输入,但将修复错误


摘自

我通过将其转换为以下任意值来解决此问题:

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

我确实喜欢typescript,但由于缺乏定义文件,它的使用受到了阻碍。我想这是一件小事——tsc工作得很好——但是如果VisualStudio要抱怨像这样的简单事情,那么对很多人来说这将是一个问题。

只是为了说明我认为Steve已经说过的话,如果你打开文件,你会看到
验证程序
界面(以及其他定义)。扩展它很简单:

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; 
}

扩展
JQuery
JQueryStatic
接口的其余工作已经在文件的其他地方为您完成。您不会在
unobtrusive
元素上得到任何类型的好处,但至少会对
验证程序的所有其余部分进行类型检查。

对不起-在我看来,第二行使用了第一行中选择的表单!我会更新的。再次感谢,但我也无法让它工作。它抱怨定义重复——我猜是来自jquery.validate.d.ts。我用另一种方法解决了它。看看我的答案。Cheers在这种情况下,您可能已经有了jQuery验证定义,可以像我所描述的那样进行扩展。如果使用强制类型转换,则在添加定义时需要删除的强制类型转换会浪费代码。@SteveFenton NuGet现在为此提供了一个“jquery validation unobtrusive.TypeScript.DefinitelyTyped”包。-1我认为这不是最好的解决方案,我不同意TS因依赖d.TS文件而受到阻碍。VS必须“抱怨”即使是简单的事情,否则键入系统有什么用?我认为大多数使用TS的开发人员都会很高兴发现社区已经组装了多少定义文件,并且会发现添加或扩展此库的过程既快又简单。没错,这不是最好的解决方案,但此库缺少.d文件确实阻碍了我。对某些人来说,扩展它可能是快速而直接的,但我认为typescript的不同足以让它变得不平凡——需要一些学习。