繁体   English   中英

Typescript 中的类型推断与显式类型声明

[英]Type inference vs. explicit type declaration in Typescript

我遇到过几个不同的代码实例,其中使用显式类型声明变量,即使推断类型很明显:

示例: loading: boolean = falsename: string = "John"count: number = 0等。

TSLint 更喜欢推断类型而不是显式类型,所以我想知道这只是一个文体问题吗? 这些显式类型在运行时是否重要?

声明的类型在运行时根本不重要。 生成Javascript时,所有类型都会被删除,因为Javascript不支持指定变量类型。

关于TSLint为什么更喜欢类型推断而不是显式类型的原因,我想说这可能是为了使事情保持干燥(不要重复自己)。 由于编译器可以为您执行键入操作,因此没有理由为代码增加更多干扰。

在您的示例中,它只是关于样式,因此,从编译角度看,它对代码没有影响。 请注意,这是在变量值显式定义其类型的情况下使用的,这可能会使您的代码在从其他变量重设值的情况下读取起来很复杂。

换句话说,您最好这样做:

name: string = "John"
bday: Date = "1980/01/10" //the compiler says there is an error

并避免:

name = "John"
bday = "1980/01/10" //no compiling error, but it should be new Date("1980/01/10")

注意:未定义的类型将始终被视为任何类型。

当今大多数javascript社区人士都会支持推理,以促使他们选择以某种方式更易于阅读类型推理,但是阅读的便捷性却无法衡量,这只是个人喜好问题。 在与仅根据自己的品味来激发自己的位置的人们合作之前,请三思而后行。

保持开放,尝试两种方法都选择最适合您的方法,或者根据团队的决定进行。

我个人更喜欢显式类型,我的可测观察结果告诉我,显式类型可以改善与代码简单性或冗长程度相关的代码指标,您不必费力确定要使用哪种类型,而且您不太可能做出错误。

From你应该注释还是让 TypeScript 推断类型?

是否注释代码的最佳一般准则是您注释的表达式/变量是否是“边界”。 边界通常是指导出的函数/类/等。 您的各种模块。 对于这些,您可能希望明确说明您期望什么使您的 API 更加清晰。

但是,特定模块内部的函数和变量可能不需要注释

何时添加类型以及何时在 TypeScript 中推断

将类型添加到所有函数声明中。

不向变量添加显式类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM