Gro*_*fit 12 this typescript tsc
我想知道在编译时是否有办法忽略某些TypeScript错误?
我基本上遇到了大多数有大型项目的人都使用this关键字的相同问题,我不想把所有的类方法都放到构造函数中.
所以我有一个这样的例子:
这似乎创建了完全有效的JS,并允许我解决这个关键字问题,但正如您在示例中所见,typescript编译器告诉我,我无法编译该代码作为关键字,这在该范围内无效.但是,我不明白为什么它是一个错误,因为它产生好的代码.
那么有没有办法告诉它忽略某些错误?我肯定有时间会有一个很好的方法来管理这个关键字,但目前我发现它非常可怕.
==编辑==
(除非你关心这个问题的背景和部分咆哮,否则不要阅读)
只是为所有这些添加一些上下文来表明我不仅仅是一些坚果工作(我相信很多人仍然会认为我是)并且我有一些很好的理由为什么我希望能够允许这些要经历的错误.
下面是其中重点介绍一些主要问题(IMO)与打字稿我已经取得了一些以前的问题,目前的 这个实现.
https://typescript.codeplex.com/discussions/429350(以及我在底部做出的一些评论)
我遇到的根本问题是我需要保证所有逻辑都在一致的范围内,我需要能够访问knockout,jQuery等中的内容以及类的本地实例.我以前用var self = this;JavaScript中的类声明做了这个并且工作得很好.正如之前的一些问题中提到的,我现在不能这样做,所以我能保证范围的唯一方法是使用lambda方法,并且我可以将其中一个定义为类中的方法的唯一方法是在构造函数中,这一部分非常重视个人偏好,但我发现人们似乎认为使用该语法被归类为推荐模式并且不仅仅是一种解决方法,这一点非常可怕.
我知道TypeScript处于alpha阶段并且会发生很多变化,而且我希望我们能够更好地处理这个问题,但是目前我要么把所有东西弄得一团糟,只是为了让打字稿工作(这是在数百个文件中)我正在迁移到TypeScript)或者我只是在这种情况下调用我比编译器更好的调用(非常危险我知道)所以我可以保持我的代码很好并希望当一个更好的模式出来处理这个我然后可以迁移它.
另外,我知道很多人都喜欢TypeScript正在接受并试图保持尽可能接近新的JavaScript功能和已知语法的事实,这很好,但是typescript不是JavaScript的下一个版本所以我没有看到在语言中添加一些语法糖的问题,因为想要使用最新和最好的官方JavaScript实现的人仍然可以这样做.
sts*_*oth 10
作者的具体问题this似乎已经解决了,但问题是关于忽略错误,以及那些最终在这里寻找如何忽略错误的人:
如果正确修复错误或使用像这里已建议的更合适的解决方法不是一个选项,从TypeScript 2.6(2017年10月31日发布),现在有一种方法可以// @ts-ignore在目标之前使用注释忽略特定行的所有错误线.
修改后的文档很简洁,但回顾一下:
// @ts-ignore
const s : string = false
Run Code Online (Sandbox Code Playgroud)
禁用此行的错误报告.
但是,这只应该在修复错误或使用hacks时作为最后的手段,(x as any)比丢失对行的所有类型检查要麻烦得多.
至于指定某些错误,此处讨论当前(2018年中)的状态,在设计会议记录(2/16/2018)和进一步的评论,这基本上是
"没有定论尚 "
强烈反对引入这种微调.
我认为您提出的问题是XY问题。您要寻找的是如何确保某些类方法具有正确的this上下文?
对于这个问题,我将提出以下解决方案:
class LambdaMethods {
constructor(private message: string) {
this.DoSomething = this.DoSomething.bind(this);
}
public DoSomething() {
alert(this.message);
}
}
Run Code Online (Sandbox Code Playgroud)
这有几个好处。
首先,您要清楚所发生的事情。大多数程序员可能不会理解关于成员语法和方法语法在代码生成方面的区别的微妙语义。
其次,通过查看构造函数,可以很清楚地看出哪些方法将具有保证的this上下文。至关重要的是,从性能的角度来看,您不想以这种方式编写所有方法,而只是绝对需要的方法。
最后,它保留了该类的OOP语义。实际上,您将能够使用super.DoSomething的派生类实现DoSomething。
| 归档时间: |
|
| 查看次数: |
13775 次 |
| 最近记录: |