Typescript Wrap "функция утверждает, что foo является типом" - PullRequest
0 голосов
/ 07 мая 2020

Давайте создадим два фиктивных класса и пример кода:

class A {
    constructor() {}
}

class B extends A {
    value: number;

    constructor(value: number) {
        super();
        this.value = value;
    }
}


const values: A[] = [new A(), new A(), new B(123)];
const oneOfThem = values[2];

validateB(oneOfThem);

console.log(oneOfThem.value);


function validateB(item: A): asserts item is B {
    if (!(item instanceof B)) {
        throw new Error('wrong type!');
    }
}

Этот код работает отлично.

Дело в том, что мне нужно обернуть validateB другой функцией:

function validateBWrapper(item: A) {
    return validateB(item);
}

Но как только я использую эту функцию вместо validateB в приведенном выше коде, она теряет информацию asserts ...:

error

Я не хочу копировать asserts item is B в функцию-оболочку. В моем фактическом использовании функция-оболочка оборачивает функцию, которая получает параметр.

Я пытаюсь найти что-то похожее на ReturnType<>, но с asserts.

Есть ли способ получить asserts информацию из данной функции?

Спасибо!

Площадка

1 Ответ

0 голосов
/ 07 мая 2020

К сожалению, вы правы, asserts и is - специальные ключевые слова, которые помогают синтаксическому анализатору машинописного текста понять наши цели, когда ReturnType<> только извлекает тип, в случае asserts это void и в случае из is это boolean.

и, не говоря явно, что функция asserts или value is T, унаследовать ее невозможно.

То, что у нас есть - открыть проблема на github и ждать, пока они не добавят здесь новый тип утилиты https://www.typescriptlang.org/docs/handbook/utility-types.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...