Почему я не в состоянии получить доступ атрибутов в типах союза, как это:Невозможно доступа к параметрам из типов союза (машинопись)
export interface ICondition {
field: string
operator: string
value: string
}
export interface IConditionGroup {
conditions: ICondition[]
group_operator: string
}
function foo(item: ICondition | IConditionGroup) {
if(typeof item.conditions === "undefined") { // does not work
let field = item.field; // does not work
///.. do something
} else {
let conditions = item.conditions; // does not work
/// .. do something else
}
}
я получаю эти ошибки:
error TS2339: Property 'conditions' does not exist on type 'ICondition | IConditionGroup'.
error TS2339: Property 'conditions' does not exist on type 'ICondition | IConditionGroup'.
error TS2339: Property 'field' does not exist on type 'ICondition | IConditionGroup'.
Но я должен бросить типы, чтобы заставить его работать - вот так:
function foo2(inputItem: ICondition | IConditionGroup) {
if(typeof (<IConditionGroup>inputItem).conditions === "undefined") {
let item= (<ICondition>inputItem);
let field = item.field;
///.. do something
} else {
let item= (<IConditionGroup>inputItem);
let conditions = item.conditions;
/// .. do something else
}
}
Я понимаю, что информация о типе теряется в JS, так почему я должен явным образом бросил его в TS?