[解決済み] Typescript関数インターフェース
2023-06-25 15:56:01
質問
なぜTypescriptは、私が定義している関数がインターフェース宣言と一致しないことを警告しないのでしょうか、しかしその関数を呼び出そうとすると警告されます。
interface IFormatter {
(data: string, toUpper : boolean): string;
};
//Compiler does not flag error here.
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
upperCaseFormatter("test"); //but does flag an error here.
どのように解決するのですか?
インターフェイスは、インターフェイスを実装した関数のすべての呼び出し元が、 必要な引数を提供することを保証します - 。
data
と
toUpper
.
TypeScriptは、JavaScriptが使われない引数を渡しても気にしないことを理解しているため、実装では巧妙にこれを許しています。
なぜこれがOKなのか?なぜなら、呼び出しコードに影響を与えることなく、インターフェースの任意の実装を代用できることを意味するからです。
例を挙げます。あなたはどちらかを代用することができます
IFormatter
の実装に置き換えることで、コードが動作します。
interface IFormatter {
(data: string, toUpper: boolean): string;
};
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
var variableCaseFormatter: IFormatter = function (data: string, toUpper: boolean) {
if (toUpper) {
return data.toUpperCase();
}
return data.toLowerCase();
}
// Switch between these at will
//var formatter = upperCaseFormatter;
var formatter = variableCaseFormatter;
formatter("test", true);
もしTypeScriptがこれを行わなかった場合、あなたの
upperCaseFormatter
というパラメータを持たなければならない。
toUpper
という、関数内のどこにも使われていないパラメータを持たなければなりません。
関連
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み] コンストラクトシグネチャを持つインターフェースはどのように機能するのですか?
-
[解決済み】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 実装 サイバーパンク風ボタン