属性 ID 在类型 'never' 上不存在

Property id does not exist on type 'never'

我正在尝试使用 Typescript 在 Redux 中对状态数组执行 .map 函数,问题是它抛出错误

[ts] Property 'id' does not exist on type 'never'

landing.id if 语句中,因为它是一个对象数组,代码对我来说很有意义,但似乎我在那里遗漏了一些东西

export default function landingReducer (state = [], action) {
switch(action.type) {
  case ActionTypes.ADD_LANDING:
    return [...state, action.landing]
  case ActionTypes.EDIT_LANDING:
    return state.map(landing => {
      if (action.landing.id == landing.id) {
        return landing;
      }
    })

提前致谢!

您的代码缺少括号和其他必要的导入,这使得其他人难以快速 reproduce and diagnose

也就是说,TypeScript 将 state 参数推断为空数组文字 [] 的类型,这被认为是 never[],这意味着它将始终为空。所以 map 函数不起作用,因为 landing 被推断为不可能的值(没有类型 never 的有效值)。

如果要修复它,您应该告诉 TypeScript state 可能是哪种数组。快速修复是使它成为 any:

的数组
... function landingReducer (state: any[] = [], action) ...

理想情况下,您应该为参数添加更具体的类型,以便 TypeScript 可以帮助您捕获错误(您怎么知道 actiontype 属性?)。

希望对您有所帮助;祝你好运!

可能是因为 state and/or action 参数缺少类型。试试这个应该与 TypeScript 2.4+ 一起工作的代码,灵感来自这个 article:

interface Landing {
    id: any;
}

enum ActionTypes {
    ADD_LANDING  = "ADD_LANDING",
    EDIT_LANDING = "EDIT_LANDING",
    OTHER_ACTION = "__any_other_action_type__"
}

interface AddLandingAction {
    type: ActionTypes.ADD_LANDING;
    landing: Landing;
}

interface EditLandingAction {
    type: ActionTypes.EDIT_LANDING;
    landing: Landing;
}

type LandingAction =
    | AddLandingAction
    | EditLandingAction;

function landingReducer(state: Landing[], action: LandingAction) {
    switch (action.type) {
        case ActionTypes.ADD_LANDING:
            return [...state, action.landing]

        case ActionTypes.EDIT_LANDING:
            return state.map(landing => {
                if (action.landing.id === landing.id) {
                    return landing;
                }
            });
    }
}