TypeScript の優れた点の 1 つは、オブジェクトを別の型に強制できるかどうかを非常に巧妙に判断できることです。
両方のプロパティがオプションであるため、宣言にはopts
実際には要件がありません。したがって、任意のオブジェクトはこのタイプと互換性があります。互換性を保つには、オブジェクトに必要なすべてのプロパティが含まれている必要があります。この場合、必要なプロパティはありません。
プロパティを必要とする調整された例を見ると、これはより明確になります。
var opts: {a: bool; n?: number; s?: string;};
opts = {a: true, n: 2}; // Ok
opts = {a: true, s: 'x'}; // Ok
opts = {a: true}; // Ok
opts = {a: true,z: 3}; // Ok
opts = {}; // not ok
opts = {z: 3}; // not ok
つまり、オブジェクトが少なくとも必要なプロパティをサポートしている場合、オブジェクトは別のオブジェクトのサブタイプと見なされます。
それはオブジェクトの設定を扱います。オブジェクトの使用を検討すると、その力がどこにあるのかがわかります。n
この型は and のみを約束するためs
(そしてa
私の例では)、 on のプロパティを呼び出すコードn
はこれらのプロパティのみを要求できます。追加のプロパティにはアクセスできません:
var opts: {a: bool; n?: number; s?: string;};
opts = {a: true, n: 1, s: 'Hi', z: 3};
var x - opts.z; // not ok
したがって、追加のプロパティではなく、型宣言のプロパティのみを使用できるため、型の安全性は維持されます。