我们正在将TypeScript项目从1.0版升级到TypeScript 1.8版。我们现在还使用最新的IgniteUI定义文件(v16.1),该文件(在类型记录版本更改之后)无法处理现有的对象初始化(请参阅本文底部的错误)。
这是使用TypeScript igTextEditor的现有IgniteUI代码:
$(this.textinput).igTextEditor({
maxLength: this.maxChars,
textMode: sTextMode,
listItems: [""],
buttonType: "dropdown",
dropDownListOpening: function (evt, ui) {
formBase.setActiveForm(self.formID);
self.buttonClicked();
return false;
},
// Validator Options
validatorOptions: {
onblur: true,
onchange: false,
required: this.required,
notificationOptions: {
direction: "right",
showIcon: "true",
mode: "popover"
},
custom: function (value, fieldOptions) {
if (self.showError) {
self.showError = false;
if (self.errorMessage.length > 0) {
$(this.element).igValidator("option", "errorMessage", self.errorMessage);
}
return false;
}
self.validate(value);
return true;
}
},
keyup: function (evt, ui) { if (evt.keyCode == 13) { $(evt.currentTarget).blur() } },
focus: function () { formBase.setActiveForm(self.formID) }
});
下面是来自igniteui.d.ts的相关接口定义:
interface IgTextEditor {
textMode?: string;
maxLength?: number;
includeKeys?: string;
excludeKeys?: string;
toUpper?: boolean;
toLower?: boolean;
listMatchIgnoreCase?: boolean;
listMatchOnly?: boolean;
listMatchContains?: boolean;
listAutoComplete?: boolean;
}
interface JQuery {
igTextEditor(options: IgTextEditor): JQuery;
igTextEditor(optionLiteral: string, options: IgTextEditor): JQuery;
igTextEditor(optionLiteral: string, optionName: string, optionValue: any): JQuery;
igTextEditor(optionLiteral: string, optionName: string): any;
igTextEditor(methodName: string): any;
}
此代码中来自igniteui.d.ts的唯一更改来自:
igTextEditor(optionLiteral: string, optionName: any, optionValue: any): JQuery;
到:
igTextEditor(optionLiteral: string, optionName: string, optionValue: any): JQuery;
在升级到TypeScript 1.8之后,我们将得到以下错误:
error TS2345:Build:类型为'{ x: number:未定义;maxLength: number;textMode: string;listItems: string[];buttonType: s.‘的参数不能分配给“string”类型的参数。
stricter :考虑到类型验证在1.8中TypeScript要严格得多,而将类型转换为< any >并不是一种选择,那么社区建议什么是处理这种情况的最佳方法?
发布于 2016-08-22 03:28:14
在类型记录1.6中添加了“严格的对象文字赋值检查”。这意味着您不能传递作为参数对象的不符合接口!
因此,如果参数对象接口声明字段{field1,field2},则只能传递{field1、field2},而不能传递{field1}或{field1、field2、field3}。
示例:
var obj:{id: number };obj ={ id: 1,name:"my object"} --因为obj声明中没有定义'name‘。
要传递其他字段,需要使用索引器
var obj:{ id: number,x:string any };您可以传递任何附加字段
只需记住严格的类型,并检查所有对象是否100%符合接口(可能来自过时的IgniteUI)
https://stackoverflow.com/questions/39067262
复制相似问题