TypeScriptは構造的型付なので同じシグネチャーであれば型が異なっても受け取れてしまう
例:
class Dog {
id: string;
name: string
}
class Cat {
id: string;
name: string;
}
function callDog(dog: Dog) {
console.log(dog);
}
const cat = new Cat("1", "猫");
callDog(cat); // エラーにならない
そこでSymbolを付与することで同じシグネチャーでも型が異なれば受け取ることができないようにすることができる
例:
const dogType = Symbol();
class Dog {
[dogType]: any;
id: string;
name: string
}
const catType = Symbol();
class Cat {
[catType]: any;
id: string;
name: string;
}
function callDog(dog: Dog) {
console.log(dog);
}
const cat = new Cat("1", "猫");
callDog(cat); // エラーとなる