Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Mobx createObservableArray与TypeScript一起使用?_Typescript_Mobx - Fatal编程技术网

如何将Mobx createObservableArray与TypeScript一起使用?

如何将Mobx createObservableArray与TypeScript一起使用?,typescript,mobx,Typescript,Mobx,尝试1: import { observable } from "mobx"; import { createObservableArray, IObservableArray } from "mobx/lib/internal"; export class Example1 { @observable items : IObservableArray<string>; constructor() { this.items = []; } }

尝试1:

import { observable } from "mobx";
import { createObservableArray, IObservableArray } from "mobx/lib/internal";
export class Example1 {
    @observable items : IObservableArray<string>;

    constructor() {
        this.items = [];
    }
}
要允许此操作,项必须具有IOvservableArray类型。否则我将得到以下错误:

类型“string[]”上不存在属性“replace”

当然,我总能做到这一点:

(this.items as IObservableArray<string>).replace(items);

但这也不是最漂亮的代码。IObservableArray已经导出,所以我想应该有一种正确的方法来使用它并确保类型安全。但是怎么做呢?

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

只读项=可观察[];
这能满足你的需要吗?

可观察的东西从哪里来?如果我从mobx使用import{observable};然后observable[]结果“observable”指的是一个值,但在这里被用作一个类型。哦,我明白了。类型必须是IObservableArray,但对于构造,我需要使用observearray。是的,这就是诀窍。有时我认为它不是世界上最明显的API,但它确实有效。为什么必须是只读的??如果我们使用decorator而不是observable[],解决方法是什么?
 this.items.replace(newItems);
(this.items as IObservableArray<string>).replace(items);
(this.items as any).replace(items);