- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下 Flow 类型别名(注意 payload
是一个可选属性):
type Action = { type: string, payload?: any }
我如何在 payload
中创建 Action 的子类型?不再是可选的了吗?
泛型对我没有任何帮助,因为它只适用于 payload
的类型本身,而不是它是可选的。最好我希望能够简单地做到这一点:
type MoreSpecificAction extends Action = { payload: any }
使用我知道的特定类型 payload
不是可选的会让我避免很多未定义的检查。作为奖励,我也可以使类型更具体,但我已经可以使用泛型实现这一点。
正如 Lewis 在接受的答案中所解释的那样,解决方案是将展开运算符与 $Exact<Action>
一起使用.然而,babel-eslint 目前不支持这种语法,但是有一个使用注释的解决方法。这是我的最终解决方案:
type LoadAttendeesAction = {
payload: Array<Attendee>,
/* :: ...$Exact<Action> */
};
需要注意的是 Action
将需要在范围内,但 ESLint 不会考虑使用它,因此您可能需要:
// eslint-disable-line no-unused-vars
最佳答案
这是一个很好的时机。我刚刚在这里问了这件事:https://github.com/facebook/flow/issues/3534
你可以用这个做你想做的事:
type Action = {
type: string,
payload?: any
}
type MoreSpecificAction = {
payload: any,
...$Exact<Action>
}
请注意,目前,在这种情况下,“向下转型”似乎不会报告错误(从 Flow 0.44.1 开始):
const y: Action = {
type: 'ACTION'
};
(y: MyAction);
但除此之外,您将能够使用上面定义的 MoreSpecificAction
编写 action creators 和 reducers。
关于javascript - Flowtype:使可选属性成为必需的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564538/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!