4
私の新しい小規模なプロジェクトでは、私は顕著なステロイドでプログラミングCのように感じるだけの理由でtypescriptと一緒に行くことに決めました。私はインターフェイスを持ってTypescriptインターフェイスの実装はインデックスシグネチャには影響しません
、右たぶん私は、文字列のキーとどんな値でオブジェクトを定義することができている
export default interface DataObject {
[key: string]: any
};
。それから私は、型「モデル」は、この上何のインデックス署名
を持っていないので、私は
要素が暗黙のうちに「あらゆる」タイプがあり、このエラーを取得してい
今import DataObject from "./data-object"; export default class Model implements DataObject { constructor(data: DataObject = {}) { Model.fill(this, data); } static fill(model: Model, data: DataObject) { for (let prop in data) { model[prop] = data[prop]; } } }
それを実装しています行
model[prop] = data[prop];
しかし、私のモデルに変更を加えて署名
import DataObject from "./data-object"; export default class Model implements DataObject { [key: string]: any; ... }
次にエラーはありません。
インターフェイス署名が自分のクラスに影響しないのはなぜですか?
しかし、これはどのように意味がありますか?インタフェースは最初にプロパティを定義することはできませんが、そうしているので、クラスはなぜ署名を継承しませんか?価値はありませんか? –
これらは定義されていません。彼らはちょうど「あなたが私を実装するなら、財産がなければならない」と言います。構文だけが同じように見えます。 TypeScriptでは、何かを「実装」または「拡張」することができます。クラスは「拡張」、インタフェース(およびクラス)は「実装」にすることができます。 – Magu