#typescript #dictionary
Вопрос:
Map.has
ожидает только ключ, определенный при его создании, поэтому проверка того, является ли строка ключом карты, невозможна без какого-либо странного ненужного кода. Код:
const map = new Map([['a', 1], ['b', 2], ['c', 3]] as const);
const inMap = (str: string) => map.has(str)
[eval].ts:2:40 - error TS2345: Argument of type 'string' is not assignable to parameter of type '"a" | "b" | "c"'.
2 const inMap = (str: string) => map.has(str)
~~~
Как преодолеть это и сохранить строгие типы?
Комментарии:
1. Я не уверен, правильно ли я понял ваш вопрос, но что, если вместо этого вы сделали новую карту<строка, число>? У вас все равно будут строгие типы, и typescript будет знать, что ключ должен быть строкой, и поэтому у вас не будет проблем с кодом.
2. @Sentinel я могу, но моя цель-иметь значения карты, чтобы быть уверенным, а не просто
string
3. Они будут напечатаны на машинке. В случае Map<строка, число> значение должно быть числом. Вместо числа вы, очевидно, могли бы также определить свой собственный тип и использовать его вместо этого. Извините, если я просто неправильно понял ваш вопрос, кстати.