Как пользоваться '! оператор 'с' в операторе 'в TypeScript? - PullRequest
0 голосов
/ 26 апреля 2018

Я программирую с опцией strikNullCheks.

Когда я использую ! operator с in operator, я получаю следующую ошибку.(Это именно то, что происходит, когда я использую полезную нагрузку действия Redux.)

Есть ли способ решить проблему?

Спасибо, что прочитали:)

interface Interface {
    AB?: {
        a: number;
    } | {
        b: number[];
    }
}

function test(ab: Interface['AB']) {
    const ab2 = ('a' in ab!) ? [ab!.a] : ab!.b;
    => error: Property 'a' does not exist on type '{ a: number; } | { b: number[]; }'. 
              Property 'a' does not exist on type '{ b: number[]; }'.
    => error: Property 'b' does not exist on type '{ a: number; } | { b: number[]; }'.
              Property 'b' does not exist on type '{ a: number; }'
}

пример

1 Ответ

0 голосов
/ 26 апреля 2018

Тип-охранник in (и, как правило, тип-охранник) не будет работать с выражениями. Таким образом, выражение ab! не приведет к сужению ab. Для работы type-guard защищаемое выражение должно быть простым параметром / переменной / полем. Самое простое решение - это явная защита от null. Это, вероятно, хорошая идея, поскольку поле в любом случае является необязательным:

function test(ab: Interface['AB']) {
    const ab2 = !ab ? null : ('a' in ab) ? [ab.a] : ab.b;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...