忽略打字稿错误“属性不存在types的值”

在VS2013大厦停止时,TSC退出代码1。这不是在VS2012的情况。

我如何运行我的解决scheme,忽略tsc.exe错误?

我得到很多The property 'x' does not exist on value of type 'y'错误的值,我想要忽略使用JavaScript函数时。

我知道这个问题已经closures了,但是我发现它寻找相同的TypeScriptException,也许其他人点击这个问题寻找这个问题。

问题在于缺lessTypeScriptinput:

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

抛出The property 'getBBox' does not exist on value of type 'HTMLElement'.

最简单的方法是显式地将variablestypes化

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

编辑,2016年下半年

由于TypeScript 1.6优选铸造操作员是as那些线可以被调整到优雅:

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


其他解决scheme

当然,如果你想做正确的事情,有时候这是一种矫枉过正,你可以:

  1. 创build简单地扩展HTMLElement自己的接口
  2. 引入扩展HTMLElement自己的打字

快速和肮脏的解决scheme是明确投给any

 (y as any).x 

这个“优点”在于,该types是明确的,即使在设置了noImplicitAny标志的情况下也会进行编译。

正确的解决scheme是更新types定义文件。

请注意,当你给any一个variables赋一个variables的时候,你会select不对这个variables进行types检查。


由于我处于免责声明模式,所以通过与新界面相结合进行双重投射,可以在您所处的情况下有用

  • 不想更新破损的types文件
  • 是猴子补丁

但是,你仍然想要某种forms的打字。

假设你想用一个新的属性x来定义一个types为OrginalDefy的实例:

 const y: OriginalDef = ... interface DefWithNewProperties extends OriginalDef { x: number } const patched = y as any as DefWithNewProperties patched.x = .... //will compile 

有几种方法来处理这个问题。 如果这个对象与某个外部库相关,最好的解决scheme是find这个库的实际定义文件( 这里是很好的仓库)并引用它,例如:

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

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

如果您想“覆盖”types系统,请尝试以下操作:

 declare var y; 

这将允许您在var y上进行任何调用。

您还可以使用以下技巧:

yx = "some custom property"//gives typescript error

y["x"] = "some custom property"//no errors

请注意,访问x和不会再次得到一个打字错误,你需要像y["x"] ,而不是yx写它。 所以从这个angular度来看,其他select更好。

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

理论

 (<any>y).x; 

真实世界的例子

我得到这个代码的错误“TS2339:属性名称”不存在types“function”“:

 let name: string = this.constructor.name; 

所以我解决了它:

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

在Angular2中有一个问题,我使用本地存储来保存一些东西,它不会让我。

解决scheme:

我有localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.

如何解决它:

localStorage的[ '城市']

(localStorage的)。市

(本地存储为任何)。城市

在我的特定项目,我无法得到它的工作,并使用declare var $;不是一个干净/推荐的解决scheme,它不承认的JQueryvariables,但我没有错误后,使用(并不得不为我的自动构build成功)。

我能够通过类似下面的东西来解决这个问题:

 let x = [ //data inside array ]; let y = new Map<any, any>(); for (var i=0; i<x.length; i++) { y.set(x[i], //value for this key here); } 

这似乎是我可以使用X内的值作为映射Y的键和编译的唯一方法。