属性 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 可以帮助您捕获错误(您怎么知道 action
有 type
属性?)。
希望对您有所帮助;祝你好运!
可能是因为 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;
}
});
}
}
我正在尝试使用 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 可以帮助您捕获错误(您怎么知道 action
有 type
属性?)。
希望对您有所帮助;祝你好运!
可能是因为 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;
}
});
}
}