忽略打字稿错误“属性不存在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
当然,如果你想做正确的事情,有时候这是一种矫枉过正,你可以:
- 创build简单地扩展
HTMLElement
自己的接口 - 引入扩展
HTMLElement
自己的打字
快速和肮脏的解决scheme是明确投给any
(y as any).x
这个“优点”在于,该types是明确的,即使在设置了noImplicitAny
标志的情况下也会进行编译。
正确的解决scheme是更新types定义文件。
请注意,当你给any
一个variables赋一个variables的时候,你会select不对这个variables进行types检查。
由于我处于免责声明模式,所以通过与新界面相结合进行双重投射,可以在您所处的情况下有用
- 不想更新破损的types文件
- 是猴子补丁
但是,你仍然想要某种forms的打字。
假设你想用一个新的属性x
来定义一个types为OrginalDef
的y
的实例:
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的键和编译的唯一方法。