当前位置: 首页 > 知识库问答 >
问题:

使用流进行类型检查

宰烈
2023-03-14

我有疑问。我写了一个流类型检查器来检查我的减速器。有一个错误,你能给我解释一下错误的原因吗。这是我的密码。

// @flow
import {SET_USER} from "./action-types";
import type {SetUserAction} from "./user-actions"; // export type SetUserAction = (user: User) => Action;
export type State = {
    +username: ?string,
    +firstName: ?string,
    +lastName: ?string,
    +email: ?string,
    avatar?: ?string,
}

export type Action = SetUserAction;

const initialState: State = {
    username: null,
    firstName: null,
    lastName: null,
    email: null,
    avatar: null,
};

type Reducer = (state: State, action: Action) => State;

const userReducer:Reducer = (state = initialState, action) => {
    switch (action.type) {
        case SET_USER:
            return {...action.payload};
        default:
            // (action: empty);
            return state;
    }
};

export {userReducer};

这是错误。

错误------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------setuser:SetUserAction=user=>({type:SET_USER,payload:user});
^^^^^^^^^^^^^^^^^^^^^^^^^^^[1]
引用:
src/redux/user/user-actions.js:24:45
24导出类型SetUserAction=(user:user)=>操作;
^^^^^^^^^^/br>错误--------------------------------------------------------------------src/redux/user/user-reducer.js:26:20
无法获取操作。type,因为函数类型[1]的静态中缺少属性type。src/redux/user/user-reducer.js:26:20
26 switch(Action.type){
^^^^
引用:
src/redux/user/user-reducer.js:23:39
23 type Reducer=(State:State,Action:Action)=>State;
^^^^^^[1]
错误------------------------------------------------------------/user/user-reducer.js:26:13
属性类型在函数类型[1]的静态中缺少。
src/redux/user/user-reducer.js:26:13
26 switch(Action.type){
^^^^^^^^^^^
引用:
src/redux/user/user-reducer.js:23:39
23 type Reducer=(State:State,Action:Action)=>State;
^^^^^^^^^^^-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------r/user-Reducer.js:23:39
23 type Reducer=(State:State,Action:Action)=>State;
^^^^^^[1]

共有1个答案

陈扬
2023-03-14

根据发布的内容,可能很难诊断错误的全部原因。但是,要检查的一点是,基于这一行

import type {SetUserAction} from "./user-actions"; // export type SetUserAction = (user: User) => Action;

您将setuseraction类型定义为函数(可能是操作创建者),稍后将action别名为类型setuseraction,这实际上意味着reducer中的action参数是函数。

export type Action = SetUserAction;

因此,当您打开Action.type时,将出现类型错误,因为SetUserAction类型上没有.type属性。

 类似资料:
  • 问题内容: 这个问题是使用TypeScript进行类类型检查的直接类比 我需要在运行时找出类型为any的变量是否实现了接口。这是我的代码: 如果在打字机游乐场输入此代码,则最后一行将被标记为错误,“名称A在当前作用域中不存在”。但这不是事实,该名称确实存在于当前范围内。我什至可以将变量声明更改为无编辑者的抱怨。浏览完网络并在SO上找到另一个问题后,我将接口更改为一个类,但是后来我无法使用对象文字来

  • 我正在从事一个Ionic/Angular项目,我正在尝试消除html文件中的类型检查问题。 我的. ts文件中有一个htest变量,如下所示 Typescript似乎对此很满意。我循环在我的html视图中显示它们,就像这样 但当我使用usr.value访问fn和ln时,typescript不理解它们是什么(红色下划线)。fn或usr.value。ln在html中,如上所述,带有keyvalue管道

  • 问题内容: 有时需要检查Python中的参数。例如,我有一个函数可以接受网络中其他节点的地址作为原始字符串地址,也可以接受封装其他节点信息的类Node。 我使用type()函数,如下所示: 这是这样做的好方法吗? 更新1: Python 3具有函数参数的注释。可以使用以下工具将其用于类型检查:http ://mypy-lang.org/ 问题答案: 使用。样品:

  • 问题内容: 我有以下我想用流程注释的内容: 我知道该怎么做了类型检查,这样的类型的(如上图所示),但我怎么能型检查其属性呢? 已经尝试过: 但是随后流程只是抱怨而从未使用过。 问题答案: 因此,您要发送类型为的道具,该道具必须具有属性和? 如果没有编写执行此检查的自定义函数,则无法实现。为此,您需要这样声明: 这是官方文档所说的: 您还可以指定一个自定义验证器。如果验证失败,它将返回一个Error

  • 怎么会呢?编译器只是太笨拙,无法在这里正确地推理类型,还是这是类型系统的一个特性?如果有,导致这种行为的规则是什么?此外,如果可能的话,我如何创建compareValues的“类型安全”版本而不添加人工参数? 请注意,所提供的方法仅仅包含一个虚拟实现,并不反映我的实际代码库中的代码。这里的重点仅仅是方法调用。

  • 我试图找到一种方法,使我的类的equals方法适用于类类型或原始int,但我所使用的方法有些不对劲: 我以前从来没有遇到过这种情况,所以我不知道什么是最干净的方法。