Typescript开关大小写令人困惑的编译器

时间:2019-06-06 23:13:04

标签: typescript firebase-cloud-messaging

我看起来很简单。我需要通过FCM发送有效负载,并且正在使用打字稿来组装数据:

    let msg;
    switch(entity){
        case "dog" : {
            msg = {name : theName, paws : String(after.paws)}
            break;
        }
        default: {
            msg = {name : theName, headType : String(after.headType)}
        }
    }
    const payload = {
        data: msg
    };

    const response = await admin.messaging().sendToDevice(tokens, payload); // error here

编译器一直坚持认为msg具有三个字段,无论哪种情况,其中一个都将是未定义的(无论是爪子还是headType),并且FCM有效载荷不允许未定义。我只想组装一个愚蠢的json,以在不重复代码的情况下发送给客户端。我想念一个秘密吗?

1 个答案:

答案 0 :(得分:2)

您可以定义type中的msg。您可以像这样:

let msg: any;

OR

let msg: {name: string, paws?: string, headType?: string}

在应用程序中拥有模型的最佳方法,以便保持一致性。您可以按以下方式创建interface Message

message.interface.ts

export interface Message {
  name: string,
  paws?: string,
  headType?: string
}

然后可以将msg变量定义为:

let msg: Message;