インターフェイスを定義するとき、TypeScriptのドキュメントには、オブジェクトがインターフェイスの形をとっている限り、余分なオブジェクトのプロパティが許可されていることが記載されています。中括弧で定義されている場合にのみ、オブジェクトで過剰なプロパティを許可するのはなぜですか?
例
interface Person {
name: string
}
function print(somebody: Person) {
console.log(somebody.name);
}
let obj = { name: "Johnny", additionalProps: true }
print(obj); // this is okay
しかし、関数のパラメータのためにこれだけ本当ですか?以下では、特定の型としてオブジェクトキャストを作成しようとし、中括弧を使用しない場合にのみ追加のプロパティを追加するとエラーがスローされます。
interface Animal {
name: string;
}
let myDog = <Animal> {
name: "Spot",
altProperty: "anything" // no error
};
myDog.altProperty = "anything else"; // Property 'altProperty' does not exist on type 'Animal'
そのタイプをアサートするときにオブジェクトに好きなだけプロパティを割り当てることができますが、彼らは型定義ではありませんので、あなたがこれらのいずれかにアクセスすることはできませんようです。どうしてこれなの? typescriptですで