首页 > 解决方案 > 在运行时检测所需的 TypeScript 字段

问题描述

我需要一种在运行时判断 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 创建一个必需字段的内部数组时应该是可能的。

有人实施过这个吗?

标签: typescript

解决方案


这对于接口是不可能的,因为它们在运行时不存在。如果有的话,您可以使用metadata对类进行操作,但我不知道可选状态是否保存在默认元数据中。

如果不是这种情况,您可能已经自己注释了属性,此时您不妨手动创建所需属性的映射/数组。


推荐阅读