#javascript #typescript
#javascript #typescript
Вопрос:
У меня есть массив: const arr = ['foo', 'bar', 'bax'];
Я хочу создать объект на основе записей массива:
const obj = {
foo: true,
bar: true,
bax: false,
fax: true, // typescript should show error here because "fax" is not in "arr"
};
Как сообщить typescript, что все ключи obj
должны быть внутри arr
?
Ответ №1:
Вы можете сделать так:
const arr = ['foo', 'bar', 'bax'] as const;
type MappedObject = Record<typeof arr[number], boolean>;
const obj: MappedObject = {
foo: true,
bar: true,
bax: false,
fax: true, // typescript should show error here because "fax" is not in "arr"
};
Связанная проблема с GitHub — Microsoft / TypeScript #28046
Комментарии:
1. Связанная проблема с GitHub Microsoft / TypeScript #28046
Ответ №2:
const arr = ['foo', 'bar', 'bax'];
//I want to create an object based on array entries:
const obj = {
foo: true,
bar: true,
bax: false,
fax: true, // typescript should show error here because "fax" is not in "arr"
};
for(const [key, value] of Object.entries(obj))
{
if(!arr.includes(key))
{
console.log(`error, ${key}: ${value} not found in array`)
}
}
Комментарии:
1. Спасибо, но я попросил решение на typescript, а не javsscript
2. @underfrankenwood Typescript — это подмножество javascript, поэтому технически это решение typescript.
3. Подмножество? Я думаю, вы имеете в виду супер набор. В любом случае это не то, чего я ожидал. Извините