[解決済み】TypeScriptで抽象的なメソッドを宣言する
2022-04-05 13:46:28
質問
TypeScriptで抽象的なメソッドを正しく定義する方法を考えています。
元の継承の例を使って
class Animal {
constructor(public name) { }
makeSound(input : string) : string;
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name) { super(name); }
makeSound(input : string) : string {
return "sssss"+input;
}
move() {
alert("Slithering...");
super.move(5);
}
}
メソッドmakeSoundを正しく定義する方法を知りたいのですが、型付けされており、オーバーライドが可能です。
また、正しい定義がわかりません。
protected
キーワードのように見えますが、何の効果もなく、コードはコンパイルされません。
どのように解決するのですか?
その
name
プロパティは、以下のようにマークされます。
protected
. これはTypeScript 1.3で追加されたもので、現在では定着しています。
は
makeSound
メソッドがマークされています。
abstract
クラスと同様です。を直接インスタンス化することはできません。
Animal
は抽象的であるため、現在では
これはTypeScript 1.6に含まれるものです
現在、正式に稼動しています。
abstract class Animal {
constructor(protected name: string) { }
abstract makeSound(input : string) : string;
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name: string) { super(name); }
makeSound(input : string) : string {
return "sssss"+input;
}
move() {
alert("Slithering...");
super.move(5);
}
}
抽象的なメソッドを模倣する古い方法は、誰かがそれを使用した場合にエラーをスローすることでした。TypeScript 1.6がプロジェクトに導入されれば、もうこの方法は必要なくなるはずだ。
class Animal {
constructor(public name) { }
makeSound(input : string) : string {
throw new Error('This method is abstract');
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name) { super(name); }
makeSound(input : string) : string {
return "sssss"+input;
}
move() {
alert("Slithering...");
super.move(5);
}
}
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] オブジェクトの配列に対してインターフェースを定義するには?
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Typescript: スプレッド型はオブジェクト型からしか作成できない
-
[解決済み] 未使用のパラメータに対する型チェックをスキップする
-
[解決済み] eslintをtypescriptで使用する - モジュールへのパスを解決できない
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] TypeScriptでグローバル変数を作成する
-
[解決済み] Jestで関数をモックする方法
-
[解決済み] TypeScriptの "*.d.ts "について
-
[解決済み】TypeScriptの "not assignable to parameter of type never "エラーとは?
-
[解決済み】「エラー TS2533: オブジェクトは 'null' または 'undefined' の可能性があります」を抑制する方法とは?
-
[解決済み】タイプからプロパティを除外する