Интерфейс Guard
имеет общий метод защиты типов isExecutable
.
interface Guard {
isExecutable<
U extends States<this> | X,
>(): this is Query<U> & Execute<U>
}
Называется он так:
declare let b: Guard;
if (b.isExecutable()) {}
Я хочу сделать isExecutable
геттером, чтобы он назывался так:
if (b.isExecutable) {}
Является ли это возможным?
Спасибо. В моей ситуации использование размеченного объединения (всех возможных универсальных типов) невозможно. Думаю, мне не повезло.
Скорее всего, нет ... Хотя бы неплохо было бы попробовать :)
Общий - это пересечение подмножества 9 типов, составляющее 512 различных объединений ... это весело на другой день.
Мы можем использовать условные типы для автоматического создания объединения без необходимости писать его явно, хотя мне нужно было бы увидеть фактический код ...
Вот код ... github.com/lusakasa/sqorn/blob/… Кроме того, 9 типов сами по себе являются общими на объединении 9 возможных типов ...
FYI соответствующая проблема GitHub, закрыто как «по дизайну»
Спасибо. Методический подход это так.
Нет, нет синтаксиса для защиты типов свойств. Единственный способ заставить его работать - это выразить свой интерфейс как размеченное объединение.