Union Type(Union Type)とIntersection Type
12035 ワード
Union Type(Union Type)とIntersection Type
1つ以上のタイプをパラメータまたは変数に使用できます.
Union Typeの例
function logMessage(value: string){
console.log(value)
}
logMessage('hello');
logMessage(100); // number 타입이 들어오기에 오류
// 숫자를 포함시키고 싶으면 string -> any 로 바꾸면 된다. <- 타입의 장점이 없어 집니다.
function logMessage(value: string){
console.log(value)
}
logMessage('hello');
logMessage(100); // number 타입이 들어오기에 오류
// 숫자를 포함시키고 싶으면 string -> any 로 바꾸면 된다. <- 타입의 장점이 없어 집니다.
function Message(value: string | number){
console.log(value);
}
Message('hello');
Message(100) // 두 가지 타입 모두 받을 수 있습니다.
使用方法
|
キーワードの使用次の3つのうちの1つを見てください.
let hyunho: string | number | boolean;
Unionタイプのメリット
function Message(value: string | number){
if(typeof value === 'number'){
value.toLocaleString
// 각 타입에 맞게 추론이 되기 떄문에 해당 타입의 API 를 사용할 수 있게 됩니다.
// 타입 가드 : 특정 타입으로 타입의 범위를 좁혀나가는(필터링 하는) 과정
}
if(typeof value === 'string'){
value.toString();
}
throw new TypeError('value must be string or number');
}
Message('hello');
Message(100)
Unionタイプフィーチャー
interface Developer{
name: string;
skill: string;
}
interface Person{
name: string;
age: number;
}
function askSomeone(someone: Developer | Person){
someone.name
// someone.skill 불가능
}
開発者とPersonが所有するすべてのプロパティが使用できると思います.
実際には、
name
しか利用できません.なぜなら、誰かにどのような価値をもたらすか分からないので、開発者でなければなりません.Personでなければなりません.
すなわち、タイプスクリプトはコードにエラーが発生する可能性があると考えられているため、インタフェースまたは特定の構造を使用して汎用タイプとして保護された属性しか提供できません.
Intersection Type
&
キーワードの使用あ~同時に、下を見ると3種類全て満足の
let capt: stirng & number & boolean;
断面タイプフィーチャー
interface Developer{
name: string;
skill: string;
}
interface Person{
name: string;
age: number;
}
function askSomeone(someone: Developer & Person){
someone.name;
someone.skill;
someone.age;
}
開発者とPersone属性のスタッフが含まれています.
共通属性しか使用できないUnionタイプとの違い
UnionとInter部分の違い(呼び出しの観点)
Union Type
function askSomeone(someone: Developer | Person){
}
askSomeone({name: '디벨로퍼', skill: '웹 개발'})
askSomeone({name: '캡틴', age: '100'})
Intersection Type
function askSomeone(someone: Developer & Person){
}
// 에러
askSomeone({name: '디벨로퍼', skill: '웹 개발'})
// 이유는 Developer 의 속성과 Persone 의 속성을 모두 넘겨야 합니다.
// 아래와 같이 사용
askSomeone({name: '디벨로퍼', skill: '웹 개발', age: 34})
リファレンス
Reference
この問題について(Union Type(Union Type)とIntersection Type), 我々は、より多くの情報をここで見つけました https://velog.io/@hoho_0815/Union-Type-유니온-타입-과-Intersection-Typeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol