在VS2013中,当tsc使用代码1退出时,构建停止。但在VS2012中却不是这样。

如何在忽略tsc.exe错误的情况下运行我的解决方案?

我得到许多属性'x'不存在的值类型'y'错误,我想忽略使用javascript函数时。


当前回答

其他方法都不管用的快速解决方法:

const a.b = 5 // error

const a['b'] = 5 // error if ts-lint rule no-string-literal is enabled

const B = 'b'
const a[B] = 5 // always works

这不是一个好的实践,但提供了一个解决方案,而不需要关闭no-string-literal

其他回答

有几种方法可以处理这个问题。如果这个对象与一些外部库相关,最好的解决方案是找到该库的实际定义文件并引用它,例如:

/// <reference path="/path/to/jquery.d.ts" >

当然,这在很多情况下并不适用。

如果你想“覆盖”类型系统,试试下面的方法:

declare var y;

这将允许你对var y进行任何调用。

我知道这个问题已经关闭了,但我发现它正在搜索相同的TypeScriptException,也许其他人正在搜索这个问题。 问题在于缺少TypeScript类型:

var coordinates = outerElement[0].getBBox();

属性“getBBox”在类型为“HTMLElement”的值上不存在。


The easiest way is to explicitly type variable as `any`
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();

编辑,2016年底

从TypeScript 1.6开始,首选的强制转换操作符是as,所以这些行可以压缩成:

let coordinates = (outerElement[0] as any).getBBox();


其他的解决方案

当然,如果你想把它做对,这有时是过度的,你可以:

创建自己的接口,简单地扩展HTMLElement 引入自己的类型,它扩展了HTMLElement

当TypeScript认为属性“x”在“y”上不存在时,那么你总是可以将“y”转换为“any”,这将允许你在“y”上调用任何东西(比如“x”)。

理论

(<any>y).x;

现实世界中的例子

我得到了这个代码的错误“TS2339:属性“名称”在类型“函数”上不存在”:

let name: string = this.constructor.name;

所以我用:

let name: string = (<any>this).constructor.name;

其他方法都不管用的快速解决方法:

const a.b = 5 // error

const a['b'] = 5 // error if ts-lint rule no-string-literal is enabled

const B = 'b'
const a[B] = 5 // always works

这不是一个好的实践,但提供了一个解决方案,而不需要关闭no-string-literal

你也可以使用下面的技巧:

Y.x = "some custom property"//给出typescript错误

Y ["x"] = "some custom property"//没有错误

注意,要访问x并且不再得到typescript错误,你需要像y["x"]那样写它,而不是y.x。所以从这个角度来看,其他选项更好。