Попытка # 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 аргумента, ноgot 1.ts (2554) observablearray.d.ts (41, 84): аргумент для «энхансера» не был предоставлен.
Зачем мне это нужно?Поскольку я хочу использовать метод replace () наблюдаемого массива:
this.items.replace(newItems);
Для этого items
должен иметь тип IOvservableArray.В противном случае я получу эту ошибку:
Свойство replace не существует для типа string [].
Конечно, я всегда могу сделать это:
(this.items as IObservableArray<string>).replace(items);
Но это очень уродливо, учитывая, что я могу захотеть заменить все элементы в нескольких местах в моем коде.Это также не безопасно типа.Если мы не заботимся о безопасности типов, то это короче и не хуже:
(this.items as any).replace(items);
Но это не самый красивый код.IObservableArray
был экспортирован, поэтому я думаю, что должен быть правильный способ его использования и обеспечения безопасности типов.Но как?