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