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

2021-05-11 14:15:09 +08:00
 myCupOfTea
interface Response<T = any> {
data?: T
}
const res :Response = {}
const abc = res.data.abc

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

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

1236 次点击
所在节点    TypeScript
5 条回复
kingwl
2021-05-11 14:20:40 +08:00
`
interface Resp<T = unknown> {
data?: T
}
const res :Resp = {}
const abc = res.data.abc
`
fox2081
2021-05-11 14:22:34 +08:00
如果你定义的泛型给了默认值(<T = any>),你不传的情况下 res.data 对的 data 就是 any,既然定义了为什么声明 res 的时候不带上类型呢?
myCupOfTea
2021-05-13 20:57:52 +08:00
@fox2081 因为没那个时间,我司的业务不太一样,一个页面几十个接口,不可能一个一个的去定义的
myCupOfTea
2021-05-13 20:58:14 +08:00
@fox2081 而且这个接口报废率有点高
fox2081
2021-05-17 09:40:26 +08:00
@myCupOfTea 如果你这个是接口返回值的泛型定义,建议让后端生成接口定义,地址、类型、传入参数、返回值,最好放在一个 json 中,然后前端通过这份配置生成接口代码和 d.ts 声明文件,这样就不用前端定义类型了,还形成了统一,后端返回的数据类型都有前端的对应,比如 int 、float 、int64 都对应 number,转换下就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776225

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX