Я отношусь к type assertion
как к чему-то вроде Hi Compiler, I know the type of this variable better than you. Just follow me!
.
Но похоже, что у компилятора все еще есть своя логика для вывода типа. Например, предположим,
interface PM_MGEInfo {
category: string;
bid: string;
cid?: string;
labs?: { [key: string]: any };
}
Тогда 1 и 2 не проблема, но 3 выдает ошибку TS2352.
function makeMgeInfo(bid: string): PM_MGEInfo { return <PM_MGEInfo>{ bid }; }
function makeMgeInfo(bid: string): PM_MGEInfo { return <PM_MGEInfo>{ bid, labs: {} }; }
function makeMgeInfo(bid: string): PM_MGEInfo { return <PM_MGEInfo>{ bid, // error TS2352: Type '{ labs: { poi_id: string; }; bid: string; }' cannot be converted to type 'PM_MGEInfo'. // Property 'category' is missing in type '{ labs: { poi_id: string; }; bid: string; }'. labs: {a: 1} }; }
Почему type assertion
начинает проверять другие поля в 3? Кто-нибудь знает его подробную логику?
Обновлено: я создал задачу в Github Microsoft/TypeScript#23698.
PM_MGEInfo
и присваиваете ей{bid: 'o'}
, она показывает ошибку, говоря, чтоcategory
отсутствует. Это должно быть поведение в 1) и 2). Не знаю, почему это срабатывает только в случае 3). - person Oscar Paz   schedule 25.04.2018{ [key: string]: any }
вызывает ошибку. Предлагаю открыть тему. - person Estus Flask   schedule 25.04.2018