TypeScriptは非パブリックなプロパティを持っていると公称型になる
TypeScriptクラスに非パブリックなプロパティを持っていると公称型になる
基本的にTypeScriptの型システムは構造的部分型だけど,classにprivateプロパティがあると公称型として扱われる
code:typescript
class Foo {
constructor(readonly id: string) {}
}
class Bar {
constructor(readonly id: string) {}
}
// エラーにならない
const foo: Foo = new Bar('bar');
class PrivateFoo {
constructor(private readonly id: string) {}
}
class PrivateBar {
constructor(private readonly id: string) {}
}
// エラーになる
// Type 'PrivateBar' is not assignable to type 'PrivateFoo'.
// Types have separate declarations of a private property 'id'.(2322)
const privateFoo: PrivateFoo = new PrivateBar('bar');
TypeScript: TS Playground - An online editor for exploring TypeScript and JavaScript