[解決済み] TypeScriptで Object.keys return string[].
2022-07-05 07:48:37
質問
を使用する場合
Object.keys(obj)
を使うと、返り値は
string[]
であるのに対し、私は
(keyof obj)[]
.
const v = {
a: 1,
b: 2
}
Object.keys(v).reduce((accumulator, current) => {
accumulator.push(v[current]);
return accumulator;
}, []);
エラーが出ています。
type '{ a: number; b: number; }' にはインデックス署名がないため、要素は暗黙的に 'any' 型を持っています。
TypeScript 3.1では
strict: true
. 遊び場です。
ここで
のすべてのチェックボックスをチェックしてください。
Options
を有効にしてください。
strict: true
.
どのように解決するのですか?
Object.keys
は
string[]
. これは、次のように設計されています。
問題
これは意図的なものです。TSの型はオープンエンドです。そのため、keysofは実行時に取得するすべてのプロパティより少なくなる可能性が高いです。
いくつかの解決策がありますが、最も単純なものは単に型アサーションを使用することです。
const v = {
a: 1,
b: 2
};
var values = (Object.keys(v) as Array<keyof typeof v>).reduce((accumulator, current) => {
accumulator.push(v[current]);
return accumulator;
}, [] as (typeof v[keyof typeof v])[]);
のエイリアスを作成することもできます。
keys
の中に
Object
を使うと、望みの型が返されます。
export const v = {
a: 1,
b: 2
};
declare global {
interface ObjectConstructor {
typedKeys<T>(obj: T): Array<keyof T>
}
}
Object.typedKeys = Object.keys as any
var values = Object.typedKeys(v).reduce((accumulator, current) => {
accumulator.push(v[current]);
return accumulator;
}, [] as (typeof v[keyof typeof v])[]);
関連
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み] タイプスクリプトです。タイプ '{ "A": string; }' で 'string' 型のパラメータを持つインデックス署名が見つかりませんでした。
-
[解決済み] TypeScriptで Object.keys return string[].
-
[解決済み] Visual Studio Code - インポート引用符の設定を調整する
最新
-
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 実装 サイバーパンク風ボタン