Как сделать кастомные типы TypeScript (Number, Array, Object, Boolean)?

102
04 сентября 2019, 10:10

Можете помочь, пожалуйста. Перехожу с 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

Сам код работает. Но ошибка есть, и она режет глаз.

READ ALSO
Не работает код javascript, в консоли ошибок нету

Не работает код javascript, в консоли ошибок нету

начинаю изучать javascript, пишу скрипт, с помощью которого меняется цвет текста по клику мышиПочему-то не работает данный код, консоль собственно...

116
Скролл блока к верху страницы при попадании в видимость экрана

Скролл блока к верху страницы при попадании в видимость экрана

Такая задача: у меня есть блок и при попадании в видимость экрана на него вешается классview

96
Вывод таблицы в js которая получена через php [закрыт]

Вывод таблицы в js которая получена через php [закрыт]

На картинке вывод таблицы которые выводит php кодДобавил код html5 и теперь нужно чтобы эту таблицу выводил js или css

130
Как исправить ошибку в запросе?

Как исправить ошибку в запросе?

На удаленном сервере вылетает ошибка: Cannot execute queries while other unbuffered queries are activeНа локальном сервере ошибки нет

142