预期 'var' 有一个 typedef

Posted

技术标签:

【中文标题】预期 \'var\' 有一个 typedef【英文标题】:Expected 'var' to have a typedef预期 'var' 有一个 typedef 【发布时间】:2018-03-10 07:53:05 【问题描述】:

我正在考虑在发货前使用TSLint 对我的代码进行静态分析。但是我有很多我认为不准确的错误。

例如,如果我分析这行代码:

let hello = "Hello!";

我从TypeScript官方网站得到的,我在TSLint中得到了这个错误:

期望 'hello' 有一个 typedef

为了避免这个错误,我必须改变我的代码:

let hello:string = "Hello!";

继续指定类型似乎很丑陋和多余。

我应该忽略这些类型的错误还是使用第二个代码?

【问题讨论】:

是否应该完全取决于您。 如果你想使用一个 lint 程序,你应该考虑它可能警告你的所有事情,并决定你需要哪组警告来满足你的特定编码约定。在任何情况下,您都不应该使用 lint 程序并简单地假设每个警告都是您关心的事情。 TypeScript 的想法是——你猜对了——使用类型。如果不想使用类型,可以禁用typedef tslint 规则或者改用纯js。不过,我建议在任何地方指定类型。 @kamyl 在打字稿中当您执行let hello = "Hello!" 时,变量hello 被键入为string,您不必在这样的简单情况下明确告诉编译器。关键是,尽管有些人可能会觉得明确指定所有类型更清晰,因此 TSLint 允许您强制执行这种编程风格。我们中的其他人认为更简洁的编码是一件好事,所以当它们被正确推断时我们会忽略类型,所以如果我使用 TSLint,我会禁用该警告。我们都没有错,这完全取决于风格。 我通常允许隐式类型,但无论我在哪里指定类型,我总是使用在冒号周围放置空格的模式,例如 let hello : string = "Hello!;"(first : string, last : string) => ... .我认为它看起来很多更整洁,更好地区分类型规范和对象分配。 【参考方案1】:

当 TSLint 或其他工具说出一些愚蠢的话时,重要的是我们(作为聪明的人)告诉它其他内容。

在某些情况下,您可能希望提示输入显式类型注释(可能更多使用函数),但变量不是这样的地方。

理想情况下,您应该得到TSLint to prompt you to remove easily inferred types。

【讨论】:

以上是关于预期 'var' 有一个 typedef的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 范围——var vs global

C# - var 在 for 循环中的行为不符合预期

private var 在类 php 中不能按预期工作

@State var 在 LazyVGrid 中未按预期更新

无法导入模块“复制”:/var/task/psycopg2/_psycopg.so:ELF 文件的 phentsize 不是预期的大小

使用eval导出变量不能按预期工作