typescript で型キャストせずに基本クラスのインスタンスを派生クラスに変換する
P粉451614834
P粉451614834 2024-02-25 19:48:09
0
2
397

基本クラスから新しいクラスを拡張し、いくつかのプロパティを追加しました。 指定された基本クラス (添付プロパティを含む) を使用して派生クラスのインスタンスを作成するにはどうすればよいですか?

このコードは機能しますが、クラス型をキャストするため、タイプ セーフではありません

型変換せずにこれを行うにはどうすればよいですか?

ああああ

P粉451614834
P粉451614834

全員に返信(2)
P粉765570115

あなたのアプローチで型変換を完全に排除することは不可能だと思いますが、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` を作成できません");
  }

  結果を返します。
}
いいねを押す +0
P粉486138196

Object.assign () メソッド を使用して、ターゲット オブジェクトにプロパティを追加できます。このメソッドは、ターゲット オブジェクトと、入力型の 交差部分である TypeScript ライブラリ内の その呼び出しシグネチャ を返します。 これは、

createCustomClass()

を次のように実装できることを意味します: function createCustomClass(base: BaseClass, myValue: number): CustomClass { return Object.assign(base, { value: myValue }); }

戻り値の型は 
BaseClass & {value:number}

で、その構造は CustomClass と同じであるため、関数のコンパイルでエラーは発生せず、 type アサーションが必要です

プレイグラウンド コード リンク

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート