从TypeScript 1.0升级到1.8后,IgniteUI中缺少属性
Missing properties in IgniteUI after upgrade from TypeScript 1.0 to 1.8
我们正在将TypeScript项目从1.0版本升级到1.8版本。我们现在也在使用最新的IgniteUI定义文件(v 16.1),它(随着Typescript版本的变化)不能与我们现有的对象初始化一起工作(见本文底部的错误)。
这是我们现有的使用IgniteUI igTextEditor的TypeScript代码:
$(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后,我们得到以下错误:
错误TS2345:构建:参数类型'{[x: number]: undefined;最大长度:数量;文本模式:字符串;listitem: string [];buttonType:年代…'不能赋值给'string'类型的形参。
问题:考虑到TypeScript在1.8中对类型验证要严格得多,并且强制转换为<任何>都不是一个选择,社区建议处理这种情况的最佳方法是什么?任何>
好的在typescript 1.6中增加了"严格的对象文字赋值检查"。这意味着你不能将不符合接口的对象作为参数传递!!
所以如果参数对象接口声明字段{field1, field2} -你可以传递{field1, field2} ONLY,但不能传递{field1}或{field1, field2, field3}
的例子:
var obj: {id: number};obj = {id: 1, name: "my object"} -将是一个错误-因为'name'没有在obj声明中定义。
传递额外的字段需要使用索引器
var obj: {id: number, [x:string] any};您可以传递任何附加字段
只要记住严格类型并检查所有对象是否100%满足接口(可能使用过时的IgniteUI)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- jQuery最近父级的数据属性选择器
- 从TypeScript 1.0升级到1.8后,IgniteUI中缺少属性