我正在尝试将我的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'谢谢
发布于 2013-03-02 18:04:05
如果您没有类型信息,并且编译器无法推断类型,那么就会出现问题。
尽管您从命令行获得了输出,但我仍然希望它会给出一个错误。Web Essentials更强地强制执行,这是工具背后的想法。
如果你不能得到类型信息(勾选在GitHub上明确键入),你可以使用一个简化的定义来修复这个错误...
interface JQueryStatic {
validator: any;
}如果你有一个验证器的定义,你可以使用这个技巧来声明对它的无关紧要,它将只有缺少的类型信息,而不是所有的验证器。
这将丢失验证器上的输入,但会修复错误。
摘自http://www.stevefenton.co.uk/Content/Blog/Date/201301/Blog/Complex-TypeScript-Definitions-Made-Easy/
发布于 2013-03-04 17:55:22
只是为了说明一下我想史蒂夫已经说过的话,如果你用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;
}扩展JQuery和JQueryStatic接口的其余工作已经在文件中的其他位置为您完成了。您不会在unobtrusive元素上获得任何类型上的好处,但至少所有剩余的Validator代码都将进行类型检查。
发布于 2013-03-03 14:33:12
我解决这个问题的方法是将其转换为:
(<any>$.validator).unobtrusive.parse($form);我确实喜欢typescript,但由于缺乏定义文件,它的使用受到了阻碍。我想这是一件小事-- tsc运行得很好--但如果Visual Studio要抱怨像这样简单的事情,那么对很多人来说,这将是一个问题。
https://stackoverflow.com/questions/15168738
复制相似问题