Type-script-タイプ保護、タイプ互換
13398 ワード
全体的には、インフラリーダーの板橋氏のタイプシナリオ入門講座を参考に整理した.
タイプスクリプトマニュアル / タイプスクリプトの開始
タイプバック基本的にUnionタイプを使うと、タイプの共通属性にしかアクセスできないので、開発者のスキルはアクセスできません. 次の方法でアクセスします.の便宜上使用されているが、可読性が悪いという欠点がある. タイプバックビットを改善するための方法. タイプの防御を使用する場合、関数の名前は「is対応タイプ」でよく使用されます. タイプのスクリプトコードでは、特定のタイプが他のタイプに適しているかどうかを意味します. の右側のタイプがより多くのプロパティを持っているか、構造的に大きい場合は、左側と互換性があります. の内部に存在する属性とタイプの定義を比較します. の値がない場合は、どの値でも互換性のあるタイプを定義します. の構造タイプの違いが発生した場合、互換性はありません.
タイプスクリプトマニュアル / タイプスクリプトの開始
タイプバック
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function introduce(): Developer | Person {
return { name: 'Tony', age: 33, skill: 'Iron Making' };
}
var tony = introduce();
console.log(tony.skill); //접근이 불가
if ((tony as Developer).skill) { //tony는 Developer이며 skill이 있을 경우
var skill = (tony as Developer).skill;
console.log(skill);
} else if ((tony as Person).age) {//tony는 Person이며 age가 있을 경우
var age = (tony as Person).age;
console.log(age);
}
ASは/*
1. 인자에 들어갈 target에 타입을 유니온 타입으로 정의
2. return 값을 Boolean 값으로 구분하여 타입 가드로 접근
3. 타입가드에서 다시 값을 Boolean값으로 반환
4. 정의한 함수를 이용하여 타입 여부 확인 후 값 접근 가능
*/
//타입가드 함수
function isDeveloper(target: Developer | Person): target is Developer {
eturn (target as Developer).skill !== undefined;
}
if (isDeveloper(tony)) { //Developer에 대한 값에 접근이 가능
tony.skill;
} else {
//Developer가 아닌 경우 유니온 타입으로 정의한 타입 중 Person에 대한 타입으로 접근이 가능
tony.age;
}
タイプ互換性interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
}
var developer: Developer;
var person: Person;
developer = person; //error - 오른쪽의 타입이 더 적은 속성을 갖고 있음
person = developer;
interface Developer {
name: string;
skill: string;
}
class Person {
name: string;
}
person = developer; //타입 호환이 가능
関数のタイプ互換性var add = function(a: number) {
//...
}
var sum = function(a: number, b: number) {
//...
}
// sum 함수가 add보다 크기가 더 큼
sum = add; //크기와 상관없이 sum함수는 2개의 인자를 받을 수 있기 때문에 1개의 인자를 갖고 있는 add함수의 타입을 호환할 수 있음
add = sum; //error - 크기와 상관없이 add함수는 1개의 인자만 받을 수 있기 때문에 에러가 발생함
ジェニーリックのタイプ互換性interface Empty<T> {
//..
}
var empty1: Empty<string>;
var empty2: Empty<number>;
empty1 = empty2;
empty2 = empty1;
interface NotEmpty<T> {
data: T;
}
var notempty1: NotEmpty<string>;
var notempty2: NotEmpty<number>;
notempty1 = notempty2; //error
notempty2 = notempty1; //error
Reference
この問題について(Type-script-タイプ保護、タイプ互換), 我々は、より多くの情報をここで見つけました https://velog.io/@leeheeae/Typescript-타입-가드-타입-호환テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol