構造的部分型【TypeScript】
ダックタイピングのようなものです。構造が一致するならば、異なる型であっても同じようなものとして扱うことができます。
class Options { sync: boolean; constructor(){ this.sync = true; } } class Options2 { constructor(public sync?: boolean, name?: string) { // プロパティ宣言でも可能 } } function doProcess(options: Options): void { ... } var opts = new Options(); var opts2 = new Options2(); opts.sync = true; doProcess(opts); doProcess({ sync: true }); // 構造が同じなので、Options型でなくても引数に指定できる doProcess(opts2); // 構造が同じ(sync: booleanが定義されている)なので、Options型でなくても引数に指定できる
Options2型の場合、syncの他にname: stringも定義されていますが、問題ありません。
ただし、オブジェクトリテラルの場合、関数の引数に指定された型と完全に一致する必要があります。プロパティは事前に定義されている必要があるからです。
doProcess({ sync: true, name: "ss" // nameプロパティは事前に定義されていないため、エラーになる });
TypeScript早わかりチートシート【1.5.3対応】 - Build Insider