Правильно ли, что `any [never]` имеет тип `any`? - PullRequest
2 голосов
/ 09 июля 2019

От unknown до кортежей, до объекта, числа ... Если вы обращаетесь к ним с помощью [never], это равно never. Так почему бы any[never] вести себя по-другому? Соответствует ли следующее утверждение, почему?

type test0 = number[never] // never
type test1 = object[never] // never
type test2 = string[never] // string?
type test3 = any[never]    // any?

type test4 = number[][never] // number
type test5 = object[][never] // object
type test6 = string[][never] // string
type test7 = any[][never]    // any
type test8 = {}[][never]     // {}

1 Ответ

1 голос
/ 09 июля 2019

Я думаю, что это соответствует.never - это подтип всех типов.Таким образом, он может быть назначен на любой другой тип.Так что, если мы можем индексировать с помощью never без ошибок компилятора:

declare let o: never;
declare let arr: any[];
arr[o] // not error, any

Остальное зависит только от того, что можно проиндексировать.number и object не имеют индексных подписей, поэтому результат равен never.string индексируется, и результатом является string, поэтому string[never] равно string.any универсально индексируется, и результат равен any, поэтому any[never] равен any.

Для массивов индексирование с помощью never, как мы видели выше, возможно и даст нам тип элемента,поэтому эти результаты согласуются.

...