打字稿中无法捕获打字稿错误
Can't catch typescript error in typescript
我无法捕捉到错误。我故意弄乱了查询字符串来处理这种情况,但它仍然通过了。打开开发者工具后,应用 崩溃 。我正在使用 axios、redux-toolkit 和 typescript。请告诉我应该怎么做?
export const fetchUsers = createAsyncThunk(
'user/fetchAll',
async (_, {rejectWithValue}) => {
try {
const response = await axios.get<IUser[]>('https://jsonplaceholder.typicode.com/use2rs')
return response.data
} catch (e) {
if (e instanceof Error) {
return rejectWithValue(e.message)
}
}
}
)
但是当我使用这样的工具时,一切正常。但是,我想使用 createAsyncThunk 和 rejectWithValue
的便利
export const fetchUsers = () => async (dispatch: AppDispatch) => {
try {
dispatch(userSlice.actions.usersFetching())
const response = await axios.get<IUser[]>('https://jsonplaceholder.typicode.com/users')
dispatch(userSlice.actions.usersFetchingSuccess(response.data))
} catch (e: any) {
dispatch(userSlice.actions.usersFetchingError(e.message))
}
}
instanceof Error
几乎从不工作,因为 extending
JavaScript-internal 类 像 Error
会导致 类 在技术上不保留右 属性 链。这可能会因您的转译目标而异。
最好检查类似 typeof error.message == 'string'
的内容或编写一些类型保护:
function hasMessage(e: any): e is {message: string} {
return e && typeof e.message == 'string'
}
// ...
if (hasMessage(e)) return rejectWithValue(e.message)
我无法捕捉到错误。我故意弄乱了查询字符串来处理这种情况,但它仍然通过了。打开开发者工具后,应用 崩溃 。我正在使用 axios、redux-toolkit 和 typescript。请告诉我应该怎么做?
export const fetchUsers = createAsyncThunk(
'user/fetchAll',
async (_, {rejectWithValue}) => {
try {
const response = await axios.get<IUser[]>('https://jsonplaceholder.typicode.com/use2rs')
return response.data
} catch (e) {
if (e instanceof Error) {
return rejectWithValue(e.message)
}
}
}
)
但是当我使用这样的工具时,一切正常。但是,我想使用 createAsyncThunk 和 rejectWithValue
的便利
export const fetchUsers = () => async (dispatch: AppDispatch) => {
try {
dispatch(userSlice.actions.usersFetching())
const response = await axios.get<IUser[]>('https://jsonplaceholder.typicode.com/users')
dispatch(userSlice.actions.usersFetchingSuccess(response.data))
} catch (e: any) {
dispatch(userSlice.actions.usersFetchingError(e.message))
}
}
instanceof Error
几乎从不工作,因为 extending
JavaScript-internal 类 像 Error
会导致 类 在技术上不保留右 属性 链。这可能会因您的转译目标而异。
最好检查类似 typeof error.message == 'string'
的内容或编写一些类型保护:
function hasMessage(e: any): e is {message: string} {
return e && typeof e.message == 'string'
}
// ...
if (hasMessage(e)) return rejectWithValue(e.message)