如何根据 switch case 为 TypeScript 中的对象分配类型

Posted

技术标签:

【中文标题】如何根据 switch case 为 TypeScript 中的对象分配类型【英文标题】:How to assign a type to an object in TypeScript based on switch case 【发布时间】:2019-04-01 15:56:42 【问题描述】:

我正在使用 TypeScript 构建一个 React Native 应用程序。

我正在编写一个带有这样的开关盒的处理程序:

export const handleMessageData = (dispatch: Dispatch, messageData: FCMMessage): void => 
  const  type, message_data  = messageData;
  const data = camelizeKeys(JSON.parse(message_data));
    switch (type) 
        case conditionOne:
          data.consumer = data.consumer.uuid;
          setHouses( entities:  houses:  [data.uuid]: data   );
        // ... more cases
        default:
          // ... do stuff
      
    ;

在每种情况下,我都知道data 是哪种类型。我怎么能告诉打字稿?

伪代码:

case conditionOne:
  data: MyType;
  data.consumer = data.consumer.uuid;

【问题讨论】:

【参考方案1】:

您的 switch 周围的更多代码会有所帮助(例如,typedata 来自哪里,它们是什么样的?)。通常,您可以使用标记联合、对象类型、记录类型或许多其他方式来声明两种类型之间的关系。

【讨论】:

我在 switch 语句周围添加了额外的代码。感谢您的帮助! 太棒了!如果您正确键入FCMMessage,这应该可以工作。您要在此处使用的功能是有区别的工会(有时人们也称其为“标记工会”)。关键是将FCMMessage 键入为可能消息的联合,其中该联合的每个成员都有一个带有字符串文字类型的type 属性。在此处查看示例:typescriptlang.org/docs/handbook/…

以上是关于如何根据 switch case 为 TypeScript 中的对象分配类型的主要内容,如果未能解决你的问题,请参考以下文章

switch结构case语句后的多个语句必须放在花括号中。 这句话对吗?为啥?

switch语句使用中遇到的问题

如何在 Scala 中使用 switch/case(简单模式匹配)?

JS Case Switches 应该如何格式化?

如何以编程方式填充 switch case 值?

switch case语句总执行第一个case