如何在TypeScript中使用Mobx createObservableArray?

时间:2019-06-16 05:39:40

标签: typescript mobx

尝试#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已导出,因此我认为应该有使用它的正确方法并确保类型安全。但是如何?

1 个答案:

答案 0 :(得分:1)

在声明可观察数组时,我经常使用这种模式:

readonly items = observable<string>([]);

这能满足您的需求吗?