[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
2022-03-14 01:43:48
質問
TypeScriptでは、関数のパラメータをFunction型として宣言することができます。私が見逃している、型安全な方法はありますか?例えば、このような場合を考えてみます。
class Foo {
save(callback: Function) : void {
//Do the save
var result : number = 42; //We get a number from the save operation
//Can I at compile-time ensure the callback accepts a single parameter of type number somehow?
callback(result);
}
}
var foo = new Foo();
var callback = (result: string) : void => {
alert(result);
}
foo.save(callback);
保存のコールバックはタイプセーフではありません。関数のパラメータが文字列のコールバック関数に、数値を渡していますが、エラーなしでコンパイルされます。saveのresultパラメータをタイプセーフな関数にすることは可能でしょうか?
TL;DR版:TypeScriptに.NETのデリゲートに相当するものはあるのか?
解決方法は?
もちろん、関数の
タイプ
は、引数の型と戻り値の型から構成されます。ここでは
callback
パラメータの型は "数値を受け取って型を返す関数でなければなりません。
any
となります。
class Foo {
save(callback: (n: number) => any) : void {
callback(42);
}
}
var foo = new Foo();
var strCallback = (result: string) : void => {
alert(result);
}
var numCallback = (result: number) : void => {
alert(result.toString());
}
foo.save(strCallback); // not OK
foo.save(numCallback); // OK
必要であれば タイプのエイリアス を使用してカプセル化します。
type NumberCallback = (n: number) => any;
class Foo {
// Equivalent
save(callback: NumberCallback) : void {
callback(42);
}
}
関連
-
[解決済み] タイプスクリプトのエラーです。TS7053 要素が暗黙のうちに 'any' 型を持っています。
-
[解決済み] Typescript コンパイルエラー: error TS1109: 期待される式
-
[解決済み] オブジェクトの型は「不明」です typescript generics
-
[解決済み] ジェネリックスを使用したTypescriptのarrow関数の構文はどのようになっていますか?
-
[解決済み] Typescriptで型の拡張は可能か?
-
[解決済み] チェックした後に○○の表現が変わっている
-
[解決済み] TypeScriptのクラス型チェック
-
[解決済み】TypeScriptの関数のオーバーローディング
-
[解決済み】ブロックに`@ts-ignore`を使用するには?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptエラー TS1005: ';' が予想される (II)
-
[解決済み] プロパティ 'values' はタイプ 'ObjectConstructor' に存在しません。
-
[解決済み] ts1206 デコレーターはここでは無効です、Angular 2。
-
[解決済み] 未使用のパラメータに対する型チェックをスキップする
-
[解決済み] 'タイプ 'never'にプロパティが存在しません。
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] async/await構文で拒否する方法は?
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み】TypeScriptの関数のオーバーローディング
-
[解決済み】tsconfig.jsonファイルを生成するにはどうしたらいいですか?