lightalex
@lightalex

Возможен ли условный тип исходя из статического свойства класса в TypeScript?

Возможно ли в TypeScript принимать тип исходя из содержимого статичного свойства класса?

class A {
	static bool = true;
}
function func(A['bool'] ? number : string) { } // A['bool'] ? number : string не воспринимается TypeScript

func(A.bool ? 123 : 'random string');

Подразумевается, что свойство bool это что-то типа константы-флага.

P.S. Я знаю про то что можно задать тип true или false и проверять тип через extends. Но данный метод не подходит, так как после преобразования в JS никаких типов не остается (разумеется) и я не могу проверить есть ли нужный флаг в классе. Также предполагается что класс A будет наследоваться и значение флага будет переопределяться в дочерних классах.
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
lightalex, максимум можно изобразить что-то такое:
class A {
  static bool: boolean = true;
}
class B extends A {
  static readonly bool = true;
}
class C extends A {
  static readonly bool = false;
}
function func<T extends typeof A, P = T['bool'] extends true ? number : string>(param: P) { } 

func<typeof B>(123); //ok
func<typeof B>('random string'); //not ok
func<typeof C>(123); //not ok
func<typeof C>('random string'); //ok

Но если параметр bool может меняться во время исполнения - тайпскрипт никак не может знать его значение во время компиляции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack
Thinking about a11y
TS может не больше чем описано в документации
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы