【问题标题】:Typescript outputs properties errors打字稿输出属性错误
【发布时间】:2018-04-26 18:27:58
【问题描述】:

我按照本教程enter link description here 运行由 Angular 编写并由 jHipster 生成的项目的测试,但似乎有问题并且出现了一些错误。 当我使用 yarn test 命令运行测试时出现此错误:

ERROR: ....component.ts[31, 17]: Property 'callme'
is declared but its value is never read.
但是这个属性是有任何原因的。如果我删除它,错误是找不到该属性。在这两种情况下,测试都无法运行,也无法使用 Karma 或 Cucumber。我已经安装了 typescript 库、tslint、karma 插件、黄瓜、纱线。 我还清理了 npm 缓存删除了 node_modules 并安装了 npm。没有结果。 奇怪的是,应用程序的执行和运行没有出现错误,但只有在我运行测试时才会出现。开发团队走这么远,而测试人员(我)甚至无法运行测试。 有人经历过吗?请与我们分享解决方案,因为我已经在互联网上进行了 7 天的研究并尝试了几乎所有方法。

【问题讨论】:

  • 您是否已将其声明为私有财产?如果在模板中使用,则必须是公共属性
  • 不,它们是私有财产。
  • @ExplosionPills 我会说这在语义上是有争议的。考虑到 private 在 TS 中实际上毫无意义,我不会全部使用它,但是如果您要使用它,并且您认为模板在逻辑上是其组件的一部分,那似乎是合理的。测试人员,是什么让您认为您需要执行规则?
  • @AluanHaddad 不要理解你的问题。但是将它们公开并不是一个解决方案。为什么打字稿很重要?我不明白为什么会有错误让我无法运行测试,但应用程序可以很好地编译,没有任何错误。

标签: typescript testing properties compiler-errors


【解决方案1】:

如果可以,请将成员设为公开。如果它在类之外被访问,这是编写代码的最诚实的方式。

public callme: string;

在 TypeScript 中,成员默认为 public,因此您可以省略访问修饰符以达到相同的效果。

如果您有一些理由让某个外部框架使用私有成员,您将需要另一个解决方案。如果编译器看不到一个成员被使用,但你知道它有一些外部使用编译器不可能知道;你可以负责。

这是您可以做到这一点的一种方法:

// @ts-ignore: ignore not used error
private callme: string;

总体而言,您可能应该avoid error suppression comments,但您可能已经找到了必要的情况(这取决于您要实现的目标 - 我猜想的概念是“我不想要我的生产代码访问该成员,但我使用的是按约定工作的框架来访问它”)。

将来,拥有一个非私有访问的私有成员很可能会中断(如果曾经强制执行私有访问)。

【讨论】:

  • 我的问题是为什么只有在我必须测试应用程序时才会出现错误,而当我构建它或运行时没有出现错误。
  • 如果您的测试工具首先编译应用程序,它可能会使用不同的编译器选项来编译。有许多严格的标志可以突出显示否则会被忽略的问题。见typescriptlang.org/docs/handbook/compiler-options.html
  • @tester 只是不要使用private 属性。它们通常具有可疑的价值,但在组件中绝对没用。这也将使您将来使用 ES 私有属性成为真正的痛苦
  • @fenton 您显然知识渊博,并且您对错误抑制的警告很好,但我认为这个用例不能证明这一点。只需删除 private 修饰符。更少的代码,没有抑制,更容易维护
  • @AluanHaddad 我已经删除了私人并将它们公开,他们完全删除了它们,结果就在这个问题中。 stackoverflow.com/questions/49980661/…
猜你喜欢
  • 2020-12-29
  • 2021-02-19
  • 1970-01-01
  • 2017-12-22
  • 2017-03-26
  • 2018-05-16
  • 2021-10-26
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多