interface IMessage {
value: string;
length?: string; // <-- why is this line necessary?
}
function saySize(message: IMessage|IMessage[]) {
if (message instanceof Array) {
return message.length;
}
}
이 스 니펫은 컴파일되지만, length
은 IMessage
에 필요합니다. 이 알아두면 오류 : 나는 IMessage
가 배열 유형으로 사용할 수 있다는 가정을 할 필요가 있기 때문에 TypeScript 공용 형식은 길이가 필요합니다.
unions.ts(8,24): error TS2339: Property 'length' does not exist on type 'IMessage | IMessage[]'.
내가이 어긋을 찾을 수 있습니다. 선택 길이를 실제로 추가해야합니까, 아니면 실수입니까?
에가 있어야 다음, 길이 속성은 필요하지 않아야 . Type Guard 패턴을 사용하면 (예와 약간 다름), if 문 내에서 유형을 유추해야합니다. 자세한 내용은 다음을 참조하십시오. http://blogs.msdn.com/b/typescript/archive/2014/11/18/what-s-new-in-the-typescript-type-system.aspx –
True. saySize의 서명을'message : IMessage []'로 변경할 때'length'가 필요 없습니다. 하지만 IMessage와 IMessage []에 saySize를 사용할 수 없다. – donnut