、階層内のクラスを扱っている場合は、instanceof
を使用することができます。
class Animal {
name: string;
}
class Cat extends Animal {
purrs: boolean;
}
class Bear extends Animal {
growls: boolean;
}
const animal = new Cat();
console.log(animal instanceof Cat); // true
console.log(animal instanceof Bear); // false
あなたが狭めたい構造のタイプを扱う場合、カスタムタイプのガードを使用することができます。
const structuralBear = {
name: 'Paddington',
growls: false
};
console.log(structuralBear instanceof Cat); // false
console.log(structuralBear instanceof Bear); // false
function isBeary(obj: any): obj is Bear {
console.log(typeof obj.growls);
return (typeof obj.name === 'string' && typeof obj.growls === 'boolean');
}
console.log(isBeary(structuralBear));
あなたのニーズに十分なものがあれば、これはうまくいくでしょう...
このようにタイプについてあまりにも多くのことを知る必要があることには、主な使用例は、ユニオンタイプを絞り込むことです。
typeofはオブジェクトの型ではなく「オブジェクト」を返します – Nicholas
動物はどのように作成されますか? '新しいCat()'や 'new Bear()'を使っていますか? 'instanceof'構造体にマッチするオブジェクトがあればtrueを返しません –