[解決済み] Typescript でインターフェースを実装する際に、どのように private property を定義するのですか?
2023-06-13 22:24:27
質問
プロジェクトでTypeScriptを使っているのですが、ある問題に遭遇しました。 以下のようなインターフェイスを定義しています。
interface IModuleMenuItem {
name: string;
}
このインターフェイスを実装したクラスを作りたいのですが、名前はこのようにプライベートプロパティにしたいのです。
class ModuleMenuItem implements IModuleMenuItem {
private name: string;
}
以下のようなエラーが出ています。
クラスModuleMenuItemは、間違ってインターフェースIModuleMenuItemを実装しています。 プロパティ名は、ModuleMenuItem 型では private ですが、IModuleMenuItem 型では private ではありません。 IModuleMenuItemではありません。
インターフェースを実装する際に、プロパティをprivateまたはprotectedとして定義するにはどうしたらよいですか。
どのように解決するのですか?
インターフェースはパブリックコントラクトを定義するものであり、そのために
protected
または
private
のようなアクセス修飾子は、インターフェース上では、どちらかというと、実装の詳細とでも言いましょうか。そのため、インターフェイスでやりたいことはできません。
もし、そのプロパティをコンシューマには読み取り専用にしたいが、サブクラスではオーバーライド可能にしたい場合、次のようなことが可能です。
interface IModuleMenuItem {
getName(): string;
}
class ModuleMenuItem implements IModuleMenuItem {
private name;
public getName() {
return name;
}
protected setName(newName : string) {
name = newName;
}
}
TypeScript 2.0(まだ出てません)では、このように
readonly
アクセス修飾子が使えるようになると思います。
https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html
interface IModuleMenuItem {
readonly name : string;
}
class ModuleMenuItem implements IModuleMenuItem {
public readonly name : string;
constructor() {
name = "name";
}
}
関連
-
[解決済み] マテリアルUIセレクトフィールドのマルチセレクト
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] クラス定数を実装するには?
-
[解決済み] JSONオブジェクトを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 react - モジュール ''react-materialize'' の宣言ファイルが見つかりませんでした。'path/to/module-name.js' は暗黙のうちに any 型を持ちます。
-
[解決済み】無効な設定オブジェクトです。APIスキーマと一致しない設定オブジェクトを使用してWebpackが初期化されました。
-
[解決済み] マテリアルUIセレクトフィールドのマルチセレクト
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] ReactJsのCreateClassは関数ではない
-
[解決済み] ReactJs "インバリアント違反..." リアクトの古典的な問題
-
React はエラー TypeError を報告します。未定義のプロパティ 'XX' を読み取ることができない、問題は解決されました。
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?
-
[解決済み] Reactでグローバル変数を宣言する方法とは?
-
[解決済み] React JSXのforEach()でHTMLが出力されない