#typescript
Вопрос:
Мне нужен способ определить во время выполнения, требуется ли определенное поле в интерфейсе машинописи.
Это должно выглядеть так:
interface Person {
name: string
age?: number
occupation?: string
}
const person: Person = {
// values
}
const fields = ['name', 'age', 'occupation']
fields.map(field => {
// I'm looking for a kind of `isRequired` TypeScript util,
// that can tell, whether a field in described interface is required
if (isRequired(person, field)) {
// do this
} else {
// do that
}
})
Я думаю, что это должно быть возможно, например, когда во время компиляции TypeScript создает внутренний массив обязательных полей.
Кто-нибудь реализовал это?
Ответ №1:
Это невозможно для интерфейсов, потому что они не существуют во время выполнения. Если что-нибудь, что вы могли бы сделать с классом, используя метаданные, но я не знаю, сохранен ли необязательный статус в метаданных по умолчанию.
Если это не так, вам, возможно, придется самостоятельно аннотировать свойства, и в этот момент вы также можете создать сопоставление/массив требуемых свойств вручную.