[解決済み] TSLintの "文字列リテラルによるオブジェクトアクセス "を回避するためのコードの書き換え方法
2022-03-01 08:32:34
質問
私はTypeScriptの初心者ですが、以下のコードでTSLintエラー "文字列リテラルによるオブジェクトアクセスは許可されません" を回避するためにコードを書き換える良い方法があるかどうか知りたいです。
interface ECType
{
name: string;
type: string;
elementType?: string;
}
export var fields: { [structName: string]: Array<ECType>; } = { };
class ECStruct1 {
foo: string;
bar: number;
baz: boolean;
qux: number;
quux: number;
corge: ECStruct2[];
grault: ECStruct2;
constructor() {
...
}
}
fields['ECStruct1'] = [
{ name: 'foo', type: 'string' },
{ name: 'bar', type: 'int' },
{ name: 'baz', type: 'bool' },
{ name: 'qux', type: 'long' },
{ name: 'quux', type: 'ulong' },
{ name: 'corge', type: 'array', elementType: 'ECStruct2' },
{ name: 'grault', type: 'ECStruct2' }
];
更新情報
: 最後に、上記のコンテンツは、300以上の自己生成ファイルの一部となります。
ECStruct
のように、クラス定義(例えば
ECStruct1
) の後に、そのメタディスクリプション (例.
fields['ECStruct1']
).
解決方法は?
ここで、いくつかの選択肢があります。
1) ルールを無効にする
/* tslint:disable:no-string-literal */
whatever.codeHere()
/* tslint:enable:no-string-literal */
2) 文字列リテラルではなく、変数を使用する。
// instead of
fields['ECStruct1'] = ...
// do something like
let key = 'ECStruct1';
fields[key] = ...
3) 明示的なインターフェイスを書く/生成する
参照 上記のMartylXの回答 . 本来は
interface ECFieldList {
ECStruct1: ECType[];
}
export var fields:ECFieldList = {
ECStruct1: [
...
しかし、#2はあまり好きではありません。なぜなら、無意味にコードを混乱させてしまうからです。もしコードを生成するのであれば、おそらく
fields
のように、#3のようにするのが良い解決策です。
関連
-
[解決済み】tsconfigファイルにおけるesModuleInteropの理解
-
[解決済み] グローバル定数の定義
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] tsc がプロジェクトのコンパイルに成功すると、ts-node は d.ts ファイルを無視します。
-
[解決済み] クラスのプロパティが整数であることはどのように指定するのですか?
-
[解決済み] タイプスクリプト TS7006 です。パラメータ 'xxx' は暗黙のうちに 'any' 型を持ちます。
-
[解決済み] TypeScriptのオブジェクトリテラルでの型定義
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み] オプションのパラメータを省略しながら、他のオプションのパラメータを渡すには?
-
[解決済み】WebStorm/PhpStormのダブルクォートで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: スプレッド型はオブジェクト型からしか作成できない
-
[解決済み] Apollo Serverでコンテキストオブジェクトを正しく入力するにはどうすればよいですか?
-
[解決済み] 2つのインターフェイスを統合する
-
TS1128: 宣言または声明が必要です。
-
[解決済み] Jestで関数をモックする方法
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] 'unknown' vs. 'any'
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み] String型とstring型の違いは何ですか?
-
[解決済み】Typescriptのパラメータ名のクエスチョンマークとは?