为什么 typescript 左边加了类型注解之后不会有 ide 提示,而必须要右边加 as 才行呢

2023-05-13 15:59:01 +08:00
 fyxtc

比如服务器给前端的 json 里面返回了一个 data 结构 json={ data:{ name:hikaru } }

前端定义的 data 结构 type Data={ name:string } const d:Data = json.data 这个时候 d.提示没法出 name ,必须右侧加上 as Data 才会有提示

1517 次点击
所在节点    程序员
10 条回复
jazzg62
2023-05-13 17:12:30 +08:00
不应该,重启下 vscode 试试呢
looking0truth
2023-05-13 18:04:04 +08:00
你是不是讲反掉了,json 的 type 你给了吗
CLMan
2023-05-13 18:07:45 +08:00
你服务器返回的是运行时数据,是`any`类型的,你不用`as`转换,你还能干嘛?

服务器返回的数据不是你自己创建的数据,编译器是没法检查的。
crysislinux
2023-05-13 18:20:44 +08:00
可能你的 tsconfig. json 里的配置认为你这个转换是非法的。你保持左边不变右边 as any 应该也可以
Danswerme
2023-05-13 18:56:19 +08:00
你说的这种一般是要用泛型来实现的,类似这种:
```
const res = await http.get<HomeType>("/home");
```

看这个帖子: https://juejin.cn/post/7113475007598034951#heading-9
Leviathann
2023-05-13 19:19:29 +08:00
不是少了一层 data ?
agdhole
2023-05-13 19:36:23 +08:00
用 webstorm
lisongeee
2023-05-13 19:41:42 +08:00
![image]( https://github.com/lisonge/vite-plugin-monkey/assets/38517192/1cd0bc31-5c72-4a92-acf1-eb551494652c)

我这边是可以的,你的 json.data 的 type 是什么呢
CLMan
2023-05-13 20:08:42 +08:00
@CLMan 是我记错了,anxios 是泛型 API ,默认是 any ,而 any 是不需要`as`转换的,只有`unknown`才需要。
DOLLOR
2023-05-13 20:28:21 +08:00
我试了是正常的。
建议提供完整的可复现示例。

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

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

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

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

© 2021 V2EX