(ts2339) 属性 'token' 在打字稿中的类型 'TopicMessage' 上不存在
(ts2339) Property 'token' does not exists on type 'TopicMessage' in typescript
下面是我自定义的带有 firebase 管理消息界面的界面
interface PushPayload {
userId: number
conId?: number
pushLogCodeKey: string
messagePayload: admin.messaging.Message
}
并且我尝试获取令牌
const blah = something.messagePayload.token
但是我收到错误代码 ts(2339)。在 firebase 管理模块中,assign 语句中有一些单一的管道。我的问题和他们有什么关系吗?
下面是接口类型
interface TokenMessage extends BaseMessage {
token: string;
}
interface TopicMessage extends BaseMessage {
topic: string;
}
interface ConditionMessage extends BaseMessage {
condition: string;
}
export namespace admin.messaging {
type Message = TokenMessage | TopicMessage | ConditionMessage;
...
}
我的 typescript 版本是 3.9.7,firebase-admin 版本是 9.2.0
很抱歉让你看到我糟糕的英语。
这行代码声明类型 Message
可以是 any 类型 TokenMessage
、TopicMessage
或 [=15] 之一=].
type Message = TokenMessage | TopicMessage | ConditionMessage;
它使用的是 TypeScript union type,我建议阅读一下。
由于 Message
可以是这些类型中的任何一种,因此不保证 token
属性。只有 TokenMessage
保证有 token
属性。如果您想假设消息始终是 TokenMessage
,那么您应该在使用它之前检查 属性 是否存在(或转换类型):
const payload = something.messagePayload
if (payload.token) {
const token = payload.token
}
下面是我自定义的带有 firebase 管理消息界面的界面
interface PushPayload {
userId: number
conId?: number
pushLogCodeKey: string
messagePayload: admin.messaging.Message
}
并且我尝试获取令牌
const blah = something.messagePayload.token
但是我收到错误代码 ts(2339)。在 firebase 管理模块中,assign 语句中有一些单一的管道。我的问题和他们有什么关系吗?
下面是接口类型
interface TokenMessage extends BaseMessage {
token: string;
}
interface TopicMessage extends BaseMessage {
topic: string;
}
interface ConditionMessage extends BaseMessage {
condition: string;
}
export namespace admin.messaging {
type Message = TokenMessage | TopicMessage | ConditionMessage;
...
}
我的 typescript 版本是 3.9.7,firebase-admin 版本是 9.2.0
很抱歉让你看到我糟糕的英语。
这行代码声明类型 Message
可以是 any 类型 TokenMessage
、TopicMessage
或 [=15] 之一=].
type Message = TokenMessage | TopicMessage | ConditionMessage;
它使用的是 TypeScript union type,我建议阅读一下。
由于 Message
可以是这些类型中的任何一种,因此不保证 token
属性。只有 TokenMessage
保证有 token
属性。如果您想假设消息始终是 TokenMessage
,那么您应该在使用它之前检查 属性 是否存在(或转换类型):
const payload = something.messagePayload
if (payload.token) {
const token = payload.token
}