You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prettier对createAsyncThunk代码报错,TypeScript/ESLint未捕获原因排查

Prettier处理createAsyncThunk代码时报语法错误,但TypeScript/ESLint未捕获的原因

我在使用Prettier格式化代码时,所有createAsyncThunk相关的代码都抛出了语法错误,但这些代码在TypeScript编译和ESLint检查中完全正常,没有任何报错。


报错示例

  • src\store\slices\calendarActionsSlice.ts: SyntaxError: Missing initializer in const declaration. (37:73)
export const getDateRangeActions = createAsyncThunk<IInitialState, number, { rejectValue: unknown }>(
  • src\store\slices\calendarSlice.ts: SyntaxError: Unexpected token (54:76)
const fetchRoot = createAsyncThunk<{ message: string, calendar: IDayStorage[], rejectedValue: unknown }>(
  • src\store\slices\monitoringSlice.ts: SyntaxError: Missing initializer in const declaration. (41:77)
export const getVacationMonitoring = createAsyncThunk<IVacMonitoring, unknown>(
  • src\store\slices\profileSlice.ts: SyntaxError: Missing initializer in const declaration. (13:65)
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { getResolvedUrl } from "../../utils/getResolvedUrl";
import { responseWithReject } from "../../utils/responseWithReject";

interface IUserInfo {
    dep_name: string
    user_name: string
}

interface IInitialState {
    user_info: IUserInfo
}

export const getProfile = createAsyncThunk<IInitialState, unknown>(
//                                                              ^
    "profile/getProfile",
    async (_, ThunkApi) => {
    try {
        const res = await fetch(getResolvedUrl("profile"), {
            method: 'GET',
            headers: <HeadersInit>{
                "x-access-token": localStorage.getItem("token"),
            }
        })
        return await res.json()
            ;
    } catch (e) {
        return ThunkApi.rejectWithValue(e)
    }
});

// 其余代码省略
  • src\store\slices\requestActionsSlice.ts: SyntaxError: Unexpected token (67:88)
export const getMyRequest = createAsyncThunk<{ message: string, vac_app_list: TRequests[] }>(
    "request_actions/getMyRequest",
    async (_, ThunkApi) => {
        try {
            const res = await fetch(getResolvedUrl("get_my_vac_app_list"), {
                method: "GET",
                headers: <HeadersInit>{
                    "Content-Type": "application/json",
                    "x-access-token": localStorage.getItem("token"),
                },
            });
            return await res.json();
        } catch (e) {
            return ThunkApi.rejectWithValue(e)
        }
    });

// 其余代码省略

当前Prettier配置

{
    "endOfLine": "auto",
    "tabWidth": 4,
    "printWidth": 100,
    "importOrder": ["^[./]"],
    "importOrderSeparation": true,
    "importOrderSortSpecifiers": true
}

可能的原因及解决方法

  1. 解析器未正确识别TypeScript语法
    Prettier默认按文件后缀推断解析器,但如果存在配置冲突或插件干扰,可能错误使用Babel解析器而非TypeScript解析器。旧版Babel解析器无法正确处理createAsyncThunk<T1, T2, T3>这种多泛型参数格式,从而抛出语法错误。

解决方法:在配置中显式指定解析器为typescript:

{
    "endOfLine": "auto",
    "tabWidth": 4,
    "printWidth": 100,
    "parser": "typescript",
    "importOrder": ["^[./]"],
    "importOrderSeparation": true,
    "importOrderSortSpecifiers": true
}
  1. 排序导入插件与Prettier版本不兼容
    配置中的importOrder等项属于@trivago/prettier-plugin-sort-imports插件,如果插件版本与Prettier不匹配,会破坏语法解析流程,导致泛型解析出错。

解决方法:

  • 检查插件与Prettier的版本兼容性,确保二者版本匹配;
  • 暂时移除插件及其配置项,验证是否仍报错,以此排查插件问题。
  1. Prettier版本过旧
    旧版Prettier对TypeScript复杂泛型的支持不完善,无法正确解析createAsyncThunk的写法。

解决方法:升级Prettier到最新稳定版本,同时确保typescript等依赖版本兼容。


内容的提问来源于stack exchange,提问作者Semro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:40:05