【问题标题】:Typescript: Strongly type incoming array with variable types打字稿:使用变量类型强类型传入数组
【发布时间】:2020-10-27 00:43:10
【问题描述】:

我有一个 JSON 数组,它可以包含 IPersonICompany 定义的两种类型中的任何一种。

[ 
            { "Name"  : "Bob", "Age" : 50, "Address": "New Jersey"},
            { "Name"  : "ABC Inc", "Founded" : 1970, "CEO": "Alice" }
]

此数据是从端点接收的。我想在我的客户端应用程序中以完全相同的方式在 Typescript 中映射这些数据。在这种情况下我应该如何定义我的模型。

我知道我们可以在 TypeScript 中定义相同的接口,但是是否可以有一个数组来保存由 IPersonICompany 定义的两个对象中的任何一个,并在迭代数组时知道每个项目的类型?

【问题讨论】:

    标签: arrays json typescript serialization interface


    【解决方案1】:

    您可以拥有Array<IPerson | ICompany>。对于迭代,你可以做这样的事情

    function iterateMyArray(array: Array<IPerson | ICompany>) {
      array.forEach(item => {
         if ('Age' in item) {
            // item is an person
            console.log(item.Address);
         } else {
            // item is a company
         }
      })
    }
    
    

    【讨论】:

    • 谢谢,我也尝试使用instanceOf 使其更干净,但它不适用于接口。
    • 有没有比if ('Age' in item)更好的选择?
    • instanceOf 仅适用于类,因为运行时中不存在类型/接口
    • 我没有看到更好的选择。 in 运算符很简单。这些是区分类型的选项:typescriptlang.org/docs/handbook/…
    • typeguard 绝对是您的朋友。它将帮助 typescript 了解在类型保护之后您将要操作的确切类型并使其更安全。
    猜你喜欢
    • 2017-04-13
    • 2021-06-17
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2015-11-06
    相关资源
    最近更新 更多