尝试#1:
import { observable } from "mobx";
import { createObservableArray, IObservableArray } from "mobx/lib/internal";
export class Example1 {
@observable items : IObservableArray<string>;
constructor() {
this.items = [];
}
}
结果:
类型'never []'缺少以下类型的属性 'IObservableArray':spliceWithArray,观察,拦截, 清除,还有另外4个。ts(2740)
尝试#2:
import { observable } from "mobx";
import { createObservableArray, IObservableArray } from "mobx/lib/internal";
export class Example1 {
@observable items : IObservableArray<string>;
constructor() {
this.visible = createObservableArray<string>([]);
}
}
结果:
预期有2-4个参数,但得到了1.ts(2554)observablearray.d.ts(41, 84):未提供“增强器”的论点。
为什么我需要这个?因为我想使用可观察数组的replace()方法:
this.items.replace(newItems);
为此,items
必须具有IOvservableArray类型。否则,我会收到此错误:
类型'string []'不存在属性'replace'。
当然,我总可以这样做:
(this.items as IObservableArray<string>).replace(items);
但是,考虑到我可能想在代码中的多个位置替换所有元素,这非常丑陋。这也不是类型安全的。如果我们不在乎类型安全,那么这样做会更短且更糟:
(this.items as any).replace(items);
但这也不是最漂亮的代码。 IObservableArray
已导出,因此我认为应该有使用它的正确方法并确保类型安全。但是如何?
答案 0 :(得分:1)
在声明可观察数组时,我经常使用这种模式:
readonly items = observable<string>([]);
这能满足您的需求吗?