gpt4 book ai didi

javascript - 最新 typescript 编译器版本 (0.9.5) 中的可索引对象

转载 作者:行者123 更新时间:2023-11-30 17:43:43 26 4
gpt4 key购买 nike

更新到 0.9.5 后,我发现 js-library 的定义有一些错误。让我通过代码说明情况。这是我的 JavaScript 代码:

var Sample = lib.ClassImpl({
ctor: function(array) {
var me = this;
this._items = array;
this._items.forEach(function(name) {
me[name] = new ItemWrapper(name); //Implemetation of ItemWrapper is unnecessary
});
},
doSomething: function() {
//some logic
},
returnSomething: function() {
return this._items.length;
}
});

这是用法:

var sample = new Sample(["First", "Second", "Third"]);
sample.doSomething();
console.log(sample.returnSomething());
console.log(sample.First.method());
console.log(sample.Third.method());

在我为之前版本的 TypeScript 编译器 (0.9.1.1) 编写的 typescript 定义中,我能够做到:

export interface ISampleBase {
doSomething(): void;
returnSomething(): number;
}
export interface ISample extends ISampleBase {
[name: string]: ItemWrapper; //here is the error
}
export class Sample implemets ISampleBase {
constructor(array: string[]);
doSomething(): void;
returnSomething(): number;
}

然后在我的 ts 文件中使用它(智能感知就像一个魅力):

var sample: ISample = new Sample(["First", "Second", "Third"]);
sample.doSomething();
sample["Third"].method();

但是在更新到版本 0.9.5 之后,我遇到了一个错误,所有命名属性都必须由字符串索引器类型 ItemWrapper 的子类型在注释标记的行上方。我有什么变体可以解决这个问题吗?

TypeScript playground with example.

最佳答案

在 TypeScript 中无法再表达这一点。这是一种固有的危险模式(例如,当我将 ["doSomething", "returnSomething"] 传递给该构造函数时会发生什么?),不值得支持围绕字符串索引器的规则的复杂性否则意味着。

关于javascript - 最新 typescript 编译器版本 (0.9.5) 中的可索引对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548333/

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