Можете помочь, пожалуйста. Перехожу с JS На TS, и сразу встал в ступор. Как написать кастомный объект (тип), который может быть сразу типа Number, Boolean, Object, и Array
Основная идея: написать абстракцию, грубо говоря для ответа сервера, сервер может ответить число, массивом, Json Объектом и булевом. Надо, чтобы можно было обращаться с ответом так же, как с основными типами (число складывать, массив сортировать и т.п), но при этом добавить общие методы для абстракции, вроде getStatusCode (получить код ответа), getHeaders() и т.д
Вот то, что уже есть, оно работает, но ругается VS code, говорит, что у изначального типа нет тех свойств, который в него добавляю потом.
type Constructor<T = {}> = new (...args: any[]) => T;
interface Properties <TBase> {
value: TBase
}
function ResponseObject<TBase extends Constructor>(Base: TBase): TBase {
return class extends Base implements Properties<TBase> {
public value: TBase;
constructor (...values: any[]) {
let thisType = typeof values[0];
if (thisType == "object" ||
thisType == "number" ||
thisType == "boolean"
) { super(values[0]); }
if (Base.toString() == "Array") {
super(...values);
}
this.value = values[0];
}
public toBlaze(): string{
return "OK!";
}
}
}
const Responsed = ResponseObject(Number);
const Res = new Responsed(56.02323);
console.log(Res.toBlaze());
https://pastebin.com/e8e4Wsab
Сам код работает. Но ошибка есть, и она режет глаз.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей