Typescriptはタイプの形状をチェックし、必要なプロパティが存在するかどうかを確認できる限り、追加のプロパティを許可することができます。
たとえば、あなたのようなタイプと機能を定義することができます
type Coordinates = {latitude: number, longitude: number};
function logCoordinates(coords: Coordinates) {
console.log('coordinates:', coords.latitude, coords.longitude);
}
をして活字体は喜んでこれらの呼び出しのいずれかを受け入れます:
logCoordinates({latitude: 1, longitude: 2});
// assuming we have a CoordinateClass know to have lat and long
const coordinates = new CoordinateClass(1, 2);
logCoordinates(coordinates);
型注釈が契約の形状を説明します。私たちが証明できるどんなパラメータもその契約を満たすことができます。ただし、追加のプロパティは常に許可されるとは限りません。
あなたは余分な性質を持っており、オブジェクトリテラルを渡す場合 - クラスのインスタンスは、この問題を持っていない - あなたが希望のタイプにそれらをキャストする必要があります。
logCoordinates(<Coordinates>{latitude: 1, longitude: 2, altitude: 3});
あなたはより多くを解決することができますas described hereを堅牢に使用します。一致しないキーを受け入れることでキャストする必要がなくなります。
type Coordinates = {latitude: number, longitude: number} & {[key: string]: number};
回答ありがとうございます。なぜあなたは(私はあなたがAngular2のクラスについて話していたと思いますか) "クラスインスタンスにはこの問題はありません"を明確にすることはできますか? – dragonmnl
@dragonmnl追加のプロパティができないようにする型チェックは、クラスのインスタンス(TS、ES6、または従来のもの)ではなくオブジェクトリテラルにのみ適用されます。 – ssube