V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myCupOfTea
V2EX  ›  TypeScript

问一个 ts 类型定义的问题 关于 any 与 optional type

  •  
  •   myCupOfTea · 2021-05-11 14:15:09 +08:00 · 1461 次点击
    这是一个创建于 1274 天前的主题,其中的信息可能已经有所发展或是发生改变。
    interface Response<T = any> {
    data?: T
    }
    const res :Response = {}
    const abc = res.data.abc
    

    上述代码,abc 的类型是 any,但是我其实本意是让 data.abc 报错来着

    为什么会这样,如果正确的定义这个类型(当前的场景const res :Response<xxx> = {} 此处没法给 Response 传泛型)

    5 条回复    2021-05-17 09:40:26 +08:00
    kingwl
        1
    kingwl  
       2021-05-11 14:20:40 +08:00
    `
    interface Resp<T = unknown> {
    data?: T
    }
    const res :Resp = {}
    const abc = res.data.abc
    `
    fox2081
        2
    fox2081  
       2021-05-11 14:22:34 +08:00
    如果你定义的泛型给了默认值(<T = any>),你不传的情况下 res.data 对的 data 就是 any,既然定义了为什么声明 res 的时候不带上类型呢?
    myCupOfTea
        3
    myCupOfTea  
    OP
       2021-05-13 20:57:52 +08:00
    @fox2081 因为没那个时间,我司的业务不太一样,一个页面几十个接口,不可能一个一个的去定义的
    myCupOfTea
        4
    myCupOfTea  
    OP
       2021-05-13 20:58:14 +08:00
    @fox2081 而且这个接口报废率有点高
    fox2081
        5
    fox2081  
       2021-05-17 09:40:26 +08:00
    @myCupOfTea 如果你这个是接口返回值的泛型定义,建议让后端生成接口定义,地址、类型、传入参数、返回值,最好放在一个 json 中,然后前端通过这份配置生成接口代码和 d.ts 声明文件,这样就不用前端定义类型了,还形成了统一,后端返回的数据类型都有前端的对应,比如 int 、float 、int64 都对应 number,转换下就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 106ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.