[解決済み】TypeScriptのインターフェイスプロパティの型を "抽出 "する方法はあるのか?
2022-04-09 11:56:04
質問
いくつかのインタフェースを含むライブラリXのタイピングファイルがあるとしよう。
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
このライブラリーを使うには、次のようなオブジェクトを渡す必要があります。
I2.y
. もちろん、ソースファイルに同じインターフェイスを作成することができます。
interface MyInterface {
a: I1,
b: I1,
c: I1
}
let myVar: MyInterface;
しかし、その場合、ライブラリからのものと最新のものを維持する負担が生じます。さらに、非常に大きくなり、コードの重複が多くなります。
したがって、インターフェースのこの特定のプロパティの型を "抽出" する方法はないでしょうか?以下のようなものです。
let myVar: typeof I2.y
(これはうまくいかず、"Cannot find name I2"というエラーになります).
編集 TS プレイグラウンドで少し遊んだ後、次のコードがまさに私が望むことを実現することに気づきました。
declare var x: I2;
let y: typeof x.y;
しかし、これには冗長な変数が必要です。
x
を宣言する必要があります。その宣言をせずに実現する方法を探しています。
どのように解決するのですか?
以前は不可能でしたが、幸運にも今は可能です。 TypeScriptバージョン2.1 . 2016年12月7日にリリースされたもので、以下のようなものが導入されています。 インデックス付きアクセスタイプ とも呼ばれます。 ルックアップ・タイプ .
構文は要素アクセスと全く同じですが、型の代わりに記述します。つまり、あなたの場合
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
let myVar: I2['y']; // indexed access type
現在
myVar
の型を持っています。
I2.y
.
で確認してください。 TypeScriptプレイグラウンド .
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み] タイプスクリプトのレコードタイプとは何ですか?
-
[解決済み] Typescript Date Type?
-
[解決済み】Typescript d.ts ファイルで定義されたインターフェースプロパティタイプのオーバーライド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー TS2322: タイプ 'Object[]' はタイプ '[Object]' に割り当てられません。
-
[解決済み] メインとテストのコンパイルを分離するために、typescriptコンパイラ(tsc)のオプションはどのように設定するのが正しいのでしょうか?
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] クラス定数を実装するには?
-
[解決済み] TypeScriptのファイル変更時にts-nodeを監視して再読み込みする方法
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み】ランタイムにオブジェクトのクラス名を取得する
-
[解決済み】タイプライター。TS7006: パラメータ 'xxx' は暗黙のうちに 'any' 型を持つ。
-
[解決済み】引数として渡されたTypeScriptオブジェクトにデフォルト値を設定する
-
[解決済み】Typescriptのパラメータ名のクエスチョンマークとは?