Оговорка 4: never extends `${infer P}` дает другой результат, чем never extends `${infer P}/`

type a = never extends `${infer P}` ? P : 1  // never
//   ^?
type b = never extends `${infer P}/` ? P : 2 // string
//   ^?

type a1 = never extends `${infer P extends string}` ? P : 1 // never
//   ^?
type b1 = never extends `${infer P extends string}/` ? P : 2 // string
//   ^?

type a2 = never extends `${infer P extends number}` ? P : 1 // never
//   ^?
type b2 = never extends `${infer P extends number}/` ? P : 2 // number
//   ^?

type a3 = never extends `${infer P extends null}` ? P : 1 // never
//   ^?
type b3 = never extends `${infer P extends null}/` ? P : 2 // null
//   ^?

type a4 = never extends `${infer P extends undefined}` ? P : 1 // never
//   ^?
type b4 = never extends `${infer P extends undefined}/` ? P : 2 // undefined
//   ^?

type a5 = never extends `${infer P extends boolean}` ? P : 1 // never
//   ^?
type b5 = never extends `${infer P extends boolean}/` ? P : 2 // boolean
//   ^?

type a6 = never extends `${infer P extends bigint}` ? P : 1 // never
//   ^?
type b6 = never extends `${infer P extends bigint}/` ? P : 2 // bigint
//   ^?
Вход в полноэкранный режим Выход из полноэкранного режима

playground

1.a)never extends ${infer P} yield never
1.b)никогда не расширяет ${infer P}/ yield string

2.a) никогда не расширяет ${infer P extends X} yield never
2.b) never extends ${infer P extends X}/ yield X

неизвестно, предполагалось ли так работать или это ошибка

2.b вроде как понятен, но не обоснован и должен следовать за 2.a, 1.b тоже должен выходить never

Ну вот, ежедневная работа с Typescript сохраняет рассудок.

обновление: я открыл проблему, и это ошибка

очевидно, 1.a должен следовать за 1.b, а 2.a должен следовать за 2.b

Оцените статью
devanswers.ru
Добавить комментарий