基本クラスから新しいクラスを拡張し、いくつかのプロパティを追加しました。 指定された基本クラス (添付プロパティを含む) を使用して派生クラスのインスタンスを作成するにはどうすればよいですか?
このコードは機能しますが、クラス型をキャストするため、タイプ セーフではありません
あなたのアプローチで型変換を完全に排除することは不可能だと思いますが、type Guard
を使用して変數(shù) result
が有効かどうかを確認する場合は、CustomClass
(私の場合、実裝は isCustomClass
です)、これは安全です: p>
// 基本クラスはパッケージからインポートされます。編集できません クラスBaseClass { パブリック x: 數(shù)値; 公共権力() { this.x * 2 を返します。 } } エクスポート インターフェイス CustomClass は BaseClass を拡張します { 値: 數(shù)値; } 関數(shù) isCustomClass(classToCheck: any): classToCheck は CustomClass { 戻る ( typeof classToCheck?.value === "number" && classToCheck インスタンスの BaseClass ); } function createCustomClass(base: BaseClass, myValue:number): CustomClass { const 結果 = ベース; (結果は CustomClass になります).value = myValue; if (!isCustomClass(result)) { throw new Error("有効な `CustomClass` を作成できません"); } 結果を返します。 }
Object.assign () メソッド
を使用して、ターゲット オブジェクトにプロパティを追加できます。このメソッドは、ターゲット オブジェクトと、入力型の 交差部分である TypeScript ライブラリ內(nèi)の その呼び出しシグネチャ を返します。
これは、
を次のように実裝できることを意味します:
function createCustomClass(base: BaseClass, myValue: number): CustomClass {
return Object.assign(base, { value: myValue });
}
戻り値の型はBaseClass & {value:number}
で、その構造は CustomClass
と同じであるため、関數(shù)のコンパイルでエラーは発生せず、 type アサーションが必要です
。