[解決済み] プロパティ 'entries' はタイプ 'ObjectConstructor' に存在しません。
質問
ng2の実装に取り組んでいます。私はオブジェクトを配列に変換するために、以下の関数呼び出しを使用しています。
var authors = Object.entries(responseObject.Authors);
これは標準的なjsの関数です。しかし、tsコンパイラは以下のエラーを返します。
"Property 'entries' does not exist on type 'ObjectConstructor'"
軽くググってみたところ、compilerOptions の target プロパティを es5 から es6 に変更することで解決しそうな感じです。しかし、以前の問題のためのいくつかの以前の調査の後、私は以下の tsconfig.json に追加の "lib" プロパティを含めることによって、es6 機能を活用することができたと思ったのです。
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../Scripts/",
"removeComments": false,
"sourceMap": true,
"target": "es5",
"moduleResolution": "node",
"lib": [
"es2015",
"dom"
]
}
また、ターゲットプロパティをes2015に変更し、プロジェクトを再構築して "typescriptUsingTsConfig"を実行してみましたが、やはり同じエラーが発生します。このような場合、どのような方法で
Object.entries()
関数を活用するためにここで何ができるのか、何か見当がつきますか?
どのように解決するのですか?
あなたの言うとおり
target
を変更するのは間違ったアプローチであり
lib
を変更するのが正しい方法ですが、言語のバージョンを間違えて指定しています。
MDN によると
,
Object.entries
は ES2017 仕様で正式に追加されました。
"lib": ["es2017"]
は、その代わりに指定しなければならないものです*。
を追加したい場合は
だけ
のメソッドに対する宣言を追加したい場合
Object
であった関数の
で追加された
ES2017 では、TypeScript で指定した
をより細かい値で指定できるようになりました。
.
"lib": ["es2017.object"]
Alexander Bird が指摘したように、デフォルトでは、暗黙の値として
"lib"
オプションに指定された値に依存します。
"target"
に指定された値に依存します。
例えば
"target": "es2017"
は、対応する接頭辞の
"lib.*"
が含まれない限り、デフォルトで
"lib"
が明示的に指定されない限り、デフォルトで含まれます。
なお、この実装自体のポリフィルを追加したい場合が多いでしょう。 このような を追加して、古いランタイムでも動作するようにしたいものです。
注意してください。 を指定すると、それ以降のバージョンを指定することができます。
"lib": ["es2020"]
あるいは、当然ながら
"lib": ["esnext"]
この最後には、TypeScript言語で知られている最新の標準ライブラリ機能に対する宣言が含まれることになる。対応するランタイムをすべてポリフィルすることは、定義上、研究が必要な複雑なタスクであり、ターゲットとなるランタイムによって異なるポリフィルをロードすることになるかもしれないため、このオプションは注意して使用する必要があります。
さらに、配列の性質を持つ
"lib"
オプションの配列の性質により、複数の値を組み合わせてランタイムに適合させることができます。例えば、ポリフィルで提供されるこれらのオブジェクトメソッドを追加して es2015 対応のウェブブラウザに合わせるには、次のように記述します。
"lib": ["es2015", "es2017.object", "dom"]
を参照してください。 TypeScriptハンドブック を参照してください。
注意
を変更することがなぜいけないのかという質問がありました。
--target
の代わりに
--lib
というのは、どちらもタイプチェックができるようになるからですか?その理由は
--target
はコードがどのようにトランスパイルされるかを変更するからです。例えば
"target": "es2017"
は、次のことを意味します。
async
関数は古いランタイムでは変換されません。出力構文を変更するのではなく、追加のライブラリの使用を可能にすることが意図されているため、構文上の特徴とライブラリの特徴を区別することが重要であるため、これは不正確な表現です。
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] これは純関数ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プロパティ 'values' はタイプ 'ObjectConstructor' に存在しません。
-
[解決済み】TypeScript、辞書のループ処理
-
[解決済み] プロパティ 'assign' はタイプ 'ObjectConstructor' に存在しません。
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行