Client = 'client',
Admin = 'admin',
};
И следующие типы:
type AdminUser = {
type: Type.Admin,
};
type ClientUser = {
type: Type.Client,
};
type User = ClientUser | AdminUser;
ТС ругается на следующий код:
const someFunction = (type: Type | null) => {
const user: User = {
type: type || Type.Client,
}
};
Ошибка: Type 'Type.Client' is not assignable to type 'Type.Admin'..
Что я делаю не так?
В функцию может прийти любой тип из тех двух, и если придет админ, то user будет невалидным и тип у него не совпадет с указанным.
в плейграунде не ругается, если убрать знак “=“ в энаме… Указанной ошибкии вроде нет 🤔 https://www.typescriptlang.org/play?#code/FAUwdgrgtgBAKgTwA4hgb2DGBhANgS3ABcYBeGAcgGMDiKAaTGAQQBMp8wzKBDdzhsAC+AbmDiiyVGw5gAqgGcQAJ24YsklAC54UgHQzOjURKk5aYIopVqmmkDsQo9eQpeNjg9mNdXlXxL4wAD4s-PJKyp7AVAD2YAokCrFQIABiEGBURPjx3AAU9o5moZC4uACUZAB86ExxCSQQkTpB5OpYMEVdJaFOIC4WRIxYQsJiQA
Это я просто руками писал пример.. странно, что не ругается, тогда буду копать глубже..
В 3.5 версии юнионы стали умнее: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#smarter-union-type-checking
поэтому в 3.5 и выше ошибка в Вашем кейсе не будет воспроизводиться)
Обсуждают сегодня