npm i dva-type —save-dev
基于 TypeScript 4.1 版本的 Template Literal Types 特性,实现 dva models
的完整类型推导和提示。
传入项目的 models
类型定义,返回 state
、actions
的类型定义。
state
类型提示
action type
类型提示
action payload
类型推断
Example
-
定义单个
Model
类型(注意Model
、Effect
不是从dva
中导入的)import { Effect, Model } from 'dva-type' interface ListModel extends Model { state: { list: any[] } effects: { // 定义effect 传入 payload 类型 getList: Effect<number> // 不需要 payload 的 effect getInfo: Effect } }
-
定义项目中所有
Model
的集合(使用type
而不是interface
)// 使用 type 定义 models,将项目中的所有 model 进行收集 type Models = { list: ListModel info: InfoModel // ... }
-
将
Models
传入ResolverModels
获取state
和actions
的类型import { ResolverModels } from 'dva-type' type State = ResolverModels<Models>['state'] type Actions = ResolverModels<Models>['actions']
-
使用
// hooks useSelector<State>() const dispatch = useDispatch<(action: Actions) => any>() // class const mapStateToProps = (state: State) => {} interface Props { dispatch: (action: Actions) => any }