MDNが言うので、キータイプとしてシンボルを使用してオブジェクトを定義しようとしています:
シンボル値は、オブジェクトプロパティの識別子として使用できます[...]
ただし、キープロパティのタイプとして使用します。
type obj = {
[key: symbol | string]: string
}
次のエラーが発生します。
TS1023:インデックスシグネチャのパラメータータイプは、 'string'または 'number'でなければなりません。
でも、それができインデックス型として使用します。私は最新のtypescriptバージョン(v3.7.2
)を使用していますが、関連する質問が見つかりました:
- Typescript:シンボルをキーとしてオブジェクトを破壊する(彼はシンボルの実際のインスタンスを使用している、タイプが 欲しい
symbol
) - TypeScript:文字列を使用する場合、インデックス署名パラメーターは「文字列」または「数値」でなければなりません。数
- ES6:シンボルをキーとしてオブジェクトを破壊する(これは解決策にはなりません-すべてのSymbolインスタンスは一意であるため、実際のインスタンスをタイプとして使用するのは少し間違っているようです...)
typescriptシンボルのドキュメントも調べましたが、タイプとしてではなく、値としてどのように使用されるかを示しています。
例:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
@Bergi私は例を追加しました、おそらく何かを監督したかもしれませんが、tsにシンボルを受け入れるようにする方法を見つけることができません(
—
Simon
any
これは悪い習慣です)。
確信している権利が、あなたが使ってみた場合はいないです
—
pavanクマール
Map<Symbol,String>
私たちは地図を持っているとして、それはあなたが達成しようとしているかの目的を果たすならば、
私にとっても同じ問題ですが、「TSはJSのスーパーセットである」という誤った宣伝が不快な部分だと思います。これはその完璧な例です。
—
パトリック
symbol
?多分あなたがあなたの使い方の例を示すでしょうtype obj
-私はすべてのシンボルキー付きプロパティがstring
sになるとは思いません。