gpt4 book ai didi

javascript - 从 TypeScript 1.0 升级到 1.8 后 IgniteUI 中缺少属性

转载 作者:行者123 更新时间:2023-11-30 15:52:42 24 4
gpt4 key购买 nike

我们正在将 TypeScript 项目从 1.0 版升级到 TypeScript 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)定义:

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] 类型的参数:未定义;最大长度:数字;文本模式:字符串;列表项:字符串[]; buttonType: s...' 不可分配给类型为“string”的参数。

问题:考虑到 TypeScript 在 1.8 中的类型验证更加严格,并且转换为 不是一个选项,社区建议什么是处理这种情况的最佳方法?

最佳答案

好的在 typescript 1.6 中添加了“严格的对象文字赋值检查”。这意味着您不能将不符合接口(interface)的参数对象作为参数传递!!EXACTLY!!

因此,如果参数对象接口(interface)声明字段 {field1, field2} - 你只能传递 {field1, field2} 而不是 {field1} 或 {field1, field2, field3}

例子:

var obj: { id: 数字};obj = {id: 1, name: "my object"} - 将会出错 - 因为 'name' 未在 obj 声明中定义。

要传递额外的字段需要使用索引器

var obj: { id: number, [x:string] 任意};并且您可以传递任何其他字段


只要记住严格类型并检查所有对象是否 100% 满足接口(interface)(可能是过时的 IgniteUI 使用的东西)

关于javascript - 从 TypeScript 1.0 升级到 1.8 后 IgniteUI 中缺少属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com