2013-03-01 37 views
4

我想将我的app.js转换为app.ts,唯一缺少的是jquery.unobtrusive-ajax.js和/或jquery.validate.unobtrusive.js的.d文件。jquery.unobtrusive-ajax.d.ts/jquery.validate.unobtrusive.d.ts任何人?

当我构建和TSC编译它工作正常,但在VS2012 WebEssentials抱怨:

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

错误:

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

感谢

回答

4

如果你还没有类型信息,并且编译器不能推断出类型,那么就会出现问题。

虽然你从命令行得到输出,但我仍然认为它会给出错误。 Web Essentials强化了事物,这是工具背后的想法。

如果如果你有一个验证的定义,你不能得到类型信息(检查肯定打在GitHub上),你可以使用一个简单的定义修正这个错误......

interface JQueryStatic { 
    validator: any; 
} 

,您可以使用此诡计声明不会对此产生影响,然后只会丢失类型信息而不是所有验证器。

这将失去在验证器上键入,但会解决错误。

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

+0

对不起 - 在我脑海中,我想第二行使用了第一行中选择的表单!我会更新。 – Fenton 2013-03-02 21:03:26

+0

再次感谢,但我无法让它工作。它抱怨重复的定义 - 从jquery.validate.d.ts我猜。我以另一种方式解决了它。看到我的答案。干杯 – Jonesie 2013-03-03 06:30:50

+1

在这种情况下,您可能已经有了jQuery验证定义,您可以按照我所述进行扩展。如果你通过强制转换来实现,那么当你添加一个定义时,你需要使用需要删除的强制转换代码。 – Fenton 2013-03-03 09:03:03

0

摘自我解决了这个由铸造任何:

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

我喜欢打字稿,但使用的是由于缺乏定义文件而受到阻碍。我想这是一件小事--TSC可以正常工作 - 但如果Visual Studio会抱怨这样的简单事情,那么这对很多人来说都是一个问题。

+1

-1我不认为这是最好的解决方案,我不同意TS依赖于d.ts文件而受到阻碍。VS必须“抱怨”即使是简单的事情,否则使用Typed系统有什么用处?我认为大多数使用TS的开发人员都会很高兴地发现社区已经组装了多少定义文件,并且可以快速而直接地找到添加或扩展这个库的过程。 – JcFx 2013-03-04 10:20:57

+1

正确,这不是最好的解决方案,但缺少这个库的.d文件绝对阻碍了我。对一些人来说,扩展它可能是快速和直接的,但我认为打字稿足够不同,使它不是微不足道的 - 这需要一些学习。 – Jonesie 2013-03-07 05:56:16

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代码进行类型检查。