为啥下面这段代码 TS 不报错 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rookiemaster
V2EX    TypeScript

为啥下面这段代码 TS 不报错

  •  
  •   rookiemaster 2024-09-28 19:26:18 +08:00 3377 次点击
    这是一个创建于 447 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面这段 TS 代码,ret 里面的数值是 1 ,所以返回的应该是 Promise<number>,不是要求的 Promise<loginResponseData>,为啥运行的时候没错.

    export function reqLogin(data: loginForm): Promise<loginResponseData> { const ret = request.post<any, loginResponseData>(API.LOGIN_URL, data) ret.then((result) => console.log(result)) // 1 return ret } 

    这是封装 axios 后, 响应拦截器的代码, 响应返回的 1

    request.interceptors.response.use( (response) => { const a: any = 1 return a }, (error) => { ElMessage('oops') return new Promise(error) } ) 
    10 条回复    2024-09-29 01:09:31 +08:00
    Trim21
        1
    Trim21  
       2024-09-28 19:30:05 +08:00
    你这用的都是 any ,他咋报错。。。
    nagisaushio
        2
    nagisaushio  
       2024-09-28 19:30:47 +08:00 via Android
    TS 只是编译期检查,没有运行时检查。
    rookiemaster
        3
    rookiemaster  
    OP
       2024-09-28 19:38:57 +08:00
    @Trim21 是为示意,直接返回 response 也没报错,response 不是 loginResponseData 类型
    lisongeee
        4
    lisongeee  
       2024-09-28 19:47:07 +08:00
    把你的 any 换成 unknown 就行了

    ---

    理想情况下 ts 的代码不会出现 any

    unknown 才是类型系统里的所有类的相交类/父类,就类似 java 里的 Object

    any 可以看成所有类型的并类/子类,同时也是告诉 ts 编译器,any 相关的类型检查全忽略
    renmu
        5
    renmu  
       2024-09-28 19:55:49 +08:00 via Android
    运行的是 js ,编译后没有类型
    rookiemaster
        6
    rookiemaster  
    OP
       2024-09-28 19:57:41 +08:00
    好像知道了,是因为返回的类型是 AxiosResponse<any, any>吗,而我的 response 只要是个 AxiosResponse 或者 any 就行
    june4
        7
    june4  
       2024-09-28 22:50:20 +08:00
    ts 配置应该设置成出现 any 就报错,否则真的太容易以为是类型正确其实被 any 掩盖了
    Xu3Xan89YsA7oP64
        8
    Xu3Xan89YsA7oP64  
       2024-09-29 00:14:05 +08:00
    跟 any 、运行时什么的无关,最根本的原因是 request.interceptors.response.use() 中传的函数的类型推导不到或者说没有受约束于 request.post 函数的类型,这两者根本没有类型约束关系,自己点进去看下 Axios 这个类型就知道了
    rookiemaster
        9
    rookiemaster  
    OP
       2024-09-29 00:33:41 +08:00 via iPhone
    @shizhibuyu2023 那我应该怎么对 response 的类型做约束,谢谢指教
    Xu3Xan89YsA7oP64
        10
    Xu3Xan89YsA7oP64  
       2024-09-29 01:09:31 +08:00
    @rookiemaster #9 我不知道你有啥要约束的,返回什么数据不是靠类型约束的,是靠跟后端之间对齐的,然后前端再进行断言后使用。正常的响应你去拦截之后改 response 纯属没事找事吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 16:03 PVG 00:03 LAX 08:03 JFK 11:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86