我应该用TypeScript输入所有内容吗

u5i3ibmn  于 2023-06-30  发布在  TypeScript
关注(0)|答案(3)|浏览(136)

例如,我有一个函数:

functiom sum(a: number, b: number) { return a + b }

在上面的函数中,我应该注解函数的返回类型是number吗?因为我认为开发人员和编译器都可以推断出函数的结果必须是number类型。
也像Angular中的httpClient.get方法返回Observable类型,它已经在它的签名中定义了,我应该在我的代理消费者函数中显式声明它吗?

function getPosts() {
  return this.httpClient.get();
}

所以我的问题是我应该输入所有内容吗?如果没有,我应该什么时候输入。

sycxhyv7

sycxhyv71#

在同时具有类型推断和显式清单类型注解的编程语言中,您可以将显式清单类型注解视为会计中的 * 复式簿记 * 的等效物:当你把每件事都做对的时候,它应该永远都不需要,因为推断类型和显式类型总是相同的,* 但是 * 当你犯了错误的时候,它可以帮助你抓住那个错误。
一个好的经验法则是:
每个 public 接口都应该显式注解。
是否注解私有接口是您的选择。
我个人有一个稍微宽松的版本:
每个 public 接口都应该显式地注解,除非类型从 nameimplementation 都非常明显。
所以,对于像

export function toString() { return "Dummy user"; }

我觉得省略类型注解是可以的,但其他人不同意。
在第一个示例中,省略类型注解可能是可以的。虽然在一种语言中,加法和字符串连接都重载了+,但当您打算返回一个数字时,很容易意外地编写返回字符串的代码,因此防止这种情况可能是有意义的。
在你的第二个例子中,我觉得它应该有一个类型注解。记住我的个人原则:
每个 public 接口都应该显式地注解,除非类型从 nameimplementation 都非常明显。
我觉得一个名为getPosts的函数实际上并没有得到帖子,而是得到了一个Observable的帖子,这一点并不明显。

iibxawm4

iibxawm42#

是的,你应该养成明确设置所有类型的习惯,这将防止出现意外的值,也有利于可读性。

jdzmm42g

jdzmm42g3#

您应该始终键入每个函数。和该函数中的参数。dto也是如此。bug将被更快地发现,可读性也更好。毕竟这是 typescript 的意义所在。
变量呢?好吧,如果变量像这样完全明显:

const x:string = "somestring";
const y:boolean = true;

那你可以跳过它。这是不必要的,有些IDE甚至强调它。但是给这样的变量给予类型也不错。但是如果变量很难理解,那么再输入一次。
最后,把所有东西都打出来也不是个坏主意。在我看来,有了明显的变量,你就失去了时间。也许是为了和你正在工作的团队讨论。

相关问题