我刚遇到一个令我感到困惑的问题flow
。有人可以向我解释为什么以下不起作用,以及我将如何修复它?
// @flow
type MessageDescriptor = {
id: string,
defaultMessage?: string,
description?: string
};
type MenuLabel = MessageDescriptor & {
+values?: { +[name: string]: string }
};
const msg: MessageDescriptor = {
id: 'test'
};
const label: MenuLabel = msg;
我得到的错误是:
9: type MenuLabel = MessageDescriptor & {
^ property `values`. Property not found in
17: const label: MenuLabel = msg;
^ object type
但是,values
显然是可选的。更奇怪的是,以下作品:
const label: MenuLabel = { ...msg };
答案 0 :(得分:0)
看起来要使“交叉点类型+选项”工作,您必须在两种类型中定义可选值。
// @flow
type MessageDescriptor = {
id: string,
defaultMessage?: string,
description?: string,
+values?: { +[name: string]: string }
};
type MenuLabel = MessageDescriptor & {
+values?: { +[name: string]: string }
};
const msg: MessageDescriptor = {
id: 'test'
};
const label: MenuLabel = msg;
鉴于评论,您可能正在寻找联盟类型而不是交叉类型?
// @flow
type MessageDescriptor = {
id: string,
defaultMessage?: string,
description?: string,
};
type MenuLabel = MessageDescriptor | {
+values?: { +[name: string]: string }
};
const msg: MessageDescriptor = {
id: 'test'
};
const label: MenuLabel = msg;