У меня есть родовой c класс. У него есть свойство value
с типом ValueType
, которое устанавливается при объявлении класса. ValueType
может быть массивом или объектом. Я хочу, чтобы метод clone()
возвратил клон массива или объекта.
class MyClass<ValueType> {
value: ValueType;
clone(): ValueType {
if (this.value instanceof Array) {
return [...this.value]; // TS doesn't like this
} else {
return {...this.value};
}
}
}
Например:
const instance = new MyClass<number[]>();
instance.value = [1, 2, 3];
console.log(instance.clone() === instance.value); // false
console.log(JSON.stringify(instance.value) === JSON.stringify(instance.value)); // true
Но определение класса выдает ошибку на return [...this.value]
:
Тип 'any []' нельзя назначить типу "ValueType". 'any []' присваивается ограничению типа 'ValueType', но можно создать экземпляр 'ValueType' с другим подтипом ограничения '{}'.
Полагаю, мне нужно более строго введите this.value instanceof Array
, поскольку Array
не указывает содержимое массива.
Как это исправить?
Редактировать: Я исправил это, заменив строку с return (([...this.value] as unknown) as ValueType);
.