打字稿中无法捕获打字稿错误

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)