Псевдонимы типов, как следует из их названия, - это просто разные имена для других типов.Имена псевдонимов типов не являются чем-то таким, что компилятор гарантированно сохраняет (в отличие от интерфейсов), и он применяет эвристику, которая обеспечивает наилучшее взаимодействие с пользователем (в данном случае это может быть неудачным).
Кроме того, A
и number
по сути один и тот же тип.Если вы хотите обеспечить невозможность присвоения от number
до A
, вам нужно использовать фирменных типов .
type A = number & { isA: undefined};
declare function f(): A;
const a = f(); // `a` is A, not number
play
Примечание: есть также предложения ( this и this ) для маркировкиМеханизм типов встроен в машинописный текст, но на момент написания он еще не завершен.