Typescript 声明 变量/常量 时,如果有初始值,还要显示指明类型吗?

2019-05-28 21:50:43 +08:00
 gzf6

比如: let name = 'v2ex';
还需要写出这样吗:let name:String = 'v2ex';
我总担心代码量稍大的时候,标示不清楚,别人看起来费劲,但是按第二种写法会不会太啰嗦了,不够简洁?

2083 次点击
所在节点    程序员
10 条回复
mooncakejs
2019-05-28 22:03:00 +08:00
不需要
mooncakejs
2019-05-28 22:04:06 +08:00
有时候需要,变量复杂一点 let a = “ sss ” 不能给 "sss"类型
q8164305
2019-05-28 22:04:09 +08:00
不需要的,自己试一下不就知道了
gzf6
2019-05-28 22:06:40 +08:00
@q8164305 哦,可能没表达清楚,我知道可以省略,只是讨论下代码风格
WittBulter
2019-05-28 22:14:20 +08:00
建议写类型的:除了基础类型以外的类型,如联合类型、字面量类型、构造体之类。
不过 tslint 和 eslint 都支持指定成员属性和变量是否需要强加类型,不管什么风格只要加了 Lint 能够完全符合 Lint 都是整洁的代码。
TS 在类型系统上非常的智能,有类似于 Result / typeof / keyof 之类的东西,不强制写类型问题也不是很大。
gzf6
2019-05-28 22:18:37 +08:00
@WittBulter 受教了
learnshare
2019-05-28 22:18:53 +08:00
最好写明,读起来更清晰
CodingNaux
2019-05-29 08:40:34 +08:00
能类型推导的就不写呗。没 type 提示的就写呗
aleen42
2019-05-29 09:24:33 +08:00
就相当于文档一样,不能嫌啰嗦
buhi
2019-05-29 11:21:46 +08:00
有的时候需要(能推导出来就不需要) 有的时候不需要(不能推导出来)
比如

type Kind = "A"|"B"
let a1 = "A"
let a2:Kind = "B"
a2 = a1 //这里就会报错, a1 是 string, a2 是 Kind, Kind 的取值范围比 string 小, 所以 string 不能赋值给 Kind
//解决办法就是显式声明 a1 是 Kind

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

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

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

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

© 2021 V2EX