使用Flow将TypeScripts复制为'

时间:2018-04-25 16:01:25

标签: javascript flowtype

在TypeScript中我可以做这样的事情

interface LoginInterface {
  username: string;
  password: string;
}

const MyObject = {
  credentials: null as LoginInterface,
  otherInfo: "I'm something not relevant to this question"
}

基本上我已经定义了一个接口LoginInterface然后我创建了一个变量MyObject,它是一个具有许多属性的对象(在这种情况下只有两个),其中一个属性credentials需要默认值为null,但我想声明它是LoginInterface类型,使用TypeScript非常简单,因为我可以使用关键字as。我怎么能用Flow复制这个?

现在我知道我可以做这样的事情

const MyObject: {
  credentials: LoginInterface,
  otherInfo: string
} = {
  credentials: null,
  otherInfo: "I'm something not relevant to this question"
};

但是我不想为MyObject定义类型我只想定义credentials的属性MyObject的类型,类似于我在TypeScript中实现这一点的方式?

1 个答案:

答案 0 :(得分:2)

Flow肯定不会允许这样做,因为它不是类型安全的。使用Flow的一个重要原因是防止空指针错误。

要明确表示值为null可能LoginInterface,您需要告诉Flow该值的类型为?LoginInterface },与null | LoginInterface相同。

如果您真的无法使用命名类型执行此操作,则可以使用以下内容执行此操作:

const MyObject = {
  credentials: (null: ?LoginInterface),
  otherInfo: "I'm something not relevant to this question"
}

您需要括号,以便Flow可以将类型表达式与其余表达式分开。