[解決済み] Typescriptで関数から引数の型を取得する方法 [重複]について
2022-04-27 08:24:04
質問
ドキュメントで何か見逃しているかもしれませんが、typescriptで関数内のパラメータの型を取得する方法が見つかりません。 つまり、ある関数
function test(a: string, b: number) {
console.log(a);
console.log(b)
}
型にアクセスしたい
string
と
number
のように、タプルである可能性が高い。
関数自体の型を取得できることは知っています。
typeof test
または、戻り値の型は
ReturnType<test>
.
を試したところ
keyof typeof test
を返します。
never
という説明もできませんでした。
その他の回答
このように
指す
extends
しかし、その仕組みがよくわからないし、型として set-of-all-params にアクセスする簡単な方法もない。
どのように解決するのですか?
Typescriptには、現在
定義済み
Parameters<F>
という型のエイリアスが標準ライブラリにあります。
とほぼ同じである。
ArgumentTypes<>
のように、独自のタイプエイリアスを作成する代わりに、それを使用すればよいのです。
type TestParams = Parameters<(a: string, b: number) => void> // [string, number]
そして、例えば2番目のパラメータの型を取得するには、数値インデキシング演算子を使用することができます。
type SecondParam = TestParams[1] // number
オリジナルの回答です。
はい、TypeScript 3.0で導入されたのは レスト/スプレッド位置のタプル というように、条件付き型を作成することができます。
type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;
うまくいくかどうか見てみましょう。
type TestArguments = ArgumentTypes<typeof test>; // [string, number]
良さそうですね。 この強化されたタプルは、オプションのパラメータやレストパラメータといったものも捕らえることができることに注意してください。
declare function optionalParams(a: string, b?: number, c?: boolean): void;
type OptionalParamsArgs = ArgumentTypes<typeof optionalParams>;
// [string, (number | undefined)?, (boolean | undefined)?]
declare function restParams(a: string, b: number, ...c: boolean[]): void;
type RestParamsArgs = ArgumentTypes<typeof restParams>;
// [string, number, ...boolean[]]
お役に立てれば幸いです。 幸運を祈ります。
関連
-
[解決済み] なぜTypescriptではinferキーワードが必要なのでしょうか?
-
[解決済み] オブジェクトの配列に対してインターフェースを定義するには?
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】TypescriptのArray<Type> VS Type[]について
-
[解決済み] TypeScriptの自由形式関数引数
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プロパティ 'value' が 'HTMLElement' 型の値に存在しない。
-
[解決済み] タイプスクリプトのコンパイルで「tsc コマンドが見つかりません。
-
[解決済み] Webpack with typescriptでTypeScript emitted no outputエラーが発生する。
-
[解決済み] eslintをtypescriptで使用する - モジュールへのパスを解決できない
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] 'タイプ 'never'にプロパティが存在しません。
-
[解決済み] オブジェクトの配列に対してインターフェースを定義するには?
-
[解決済み] TypeScriptのファイル変更時にts-nodeを監視して再読み込みする方法
-
[解決済み】Visual Studio Codeで.js.mapファイルを非表示にする方法
-
[解決済み】引数として渡されたTypeScriptオブジェクトにデフォルト値を設定する