interface Response<T = any> {
data?: T
}
const res :Response = {}
const abc = res.data.abc
上述代码,abc 的类型是 any,但是我其实本意是让 data.abc 报错来着
为什么会这样,如果正确的定义这个类型(当前的场景const res :Response<xxx> = {} 此处没法给 Response 传泛型)
1
kingwl 2021 年 5 月 11 日
`
interface Resp<T = unknown> { data?: T } const res :Resp = {} const abc = res.data.abc ` |
2
momo2278 2021 年 5 月 11 日
如果你定义的泛型给了默认值(<T = any>),你不传的情况下 res.data 对的 data 就是 any,既然定义了为什么声明 res 的时候不带上类型呢?
|
3
myCupOfTea OP @fox2081 因为没那个时间,我司的业务不太一样,一个页面几十个接口,不可能一个一个的去定义的
|
4
myCupOfTea OP @fox2081 而且这个接口报废率有点高
|
5
momo2278 2021 年 5 月 17 日
@myCupOfTea 如果你这个是接口返回值的泛型定义,建议让后端生成接口定义,地址、类型、传入参数、返回值,最好放在一个 json 中,然后前端通过这份配置生成接口代码和 d.ts 声明文件,这样就不用前端定义类型了,还形成了统一,后端返回的数据类型都有前端的对应,比如 int 、float 、int64 都对应 number,转换下就行
|