const q = true;
interface A {
a?: typeof q // по идее же должен тип boolean задаться переменной
}
const a: A = {a: true} // все ок
const a: A = {a: false} // ошибка
В TypeScript есть литеральные типы ('some string', 1, 2, 3, true, false).
Значение константы поменять нельзя, поэтому TypeScript выводит для них литеральный тип.
Поэтому тип q будет не boolean, а true.
Что любопытно, даже если для переменной указать тип и потом присвоить значение, всё равно typeof берет максимально узкий тип:
let q: boolean;
q = true;
interface A {
a?: typeof q // по идее же должен тип boolean задаться переменной
}
const a: A = {a: true} // все ок
const b: A = {a: false} // ошибка
если забанить вторую строку или хотя бы обернуть в неочевидное для тайпскрипта условие, то остается boolean
Alexandroppolus, думаю разрабы тса не имплементили и не собираются имплементить проверку тернарников банально по той причине, что это не имеет смысла в реальном мире.)