【发布时间】:2019-09-05 13:00:17
【问题描述】:
我想为我们应该实现的对象字面量声明一个“骨架”接口。
在我们创建 AttributeGettersSkeletonType 时,我们不知道 getter 将返回什么类型 - 只是 必须 有称为 getColor、getMake 和 @ 的方法987654324@ 在对象上,并且他们应该返回 Promises of...something。
但是当我们实现对象时,我们知道承诺值的类型,并且我们想告诉流程。
// @flow strict
type AttributeGettersSkeletonType = {|
getColor: () => Promise<mixed>,
getMake: () => Promise<mixed>,
getYear: () => Promise<mixed>,
|};
const carDetails = ({
getColor: () => Promise.resolve('blue'),
getMake: () => Promise.resolve('honda'),
getYear: (() => Promise.resolve(1994): () => Promise<number>),
}: AttributeGettersSkeletonType);
carDetails.getYear().then(year => {
const yearPlusOne = year + 1;
})
现在,这会产生:
16: const yearPlusOne = year + 1;
^ Cannot add `year` and `1` because mixed [1] could either behave like a string or like a number.
References:
6: getYear: () => Promise<mixed>,
^ [1]
我知道一种解决方案是优化 then 节中的类型,但我希望有一种方法可以在我们创建对象时告诉 flow 正确的类型。我的尝试是(() => Promise.resolve(1994): () => Promise<number>),明确地提供了一个更精致的类型。
想法?
谢谢!
【问题讨论】:
-
您是否在寻找
any而不是mixed? -
Nah -
any将从该变量中删除流输入,并允许我用它做任何事情 -
啊,我明白了。我误解了你的整体问题,抱歉。
标签: javascript types flowtype