2016-05-29 50 views
0

我怕我不知道如果这是一个问题,关于WebStormAngular2打字稿错误分配变量类型

我有一个Angular2筹建成立和正在使用WebStorm 2016年1月2日与编辑。我的一个部件的使用变得简单document.getElementById('some-el');到DOM元素的引用,并将此向服务方法:

calc(el:HTMLElement){ 
    this.height = el.offsetHeight; 
    this.width = el.offsetWidth; 

    let span:HTMLElement = el.querySelector("span"); 
    this.pos = span.offsetTop - span.offsetHeight; 
} 

一切正常,我没有在浏览器中得到任何错误,但我得到一个错误在WebStorm挂el.querySelector("span");

错误说:Initializer type Element is not assignable to variable type HTMLElement

我不知道这是否与WebStorm了问题,如果我确实打字错误的东西。如果我设置的span类型Element错误消失但随后的offsetTopoffsetHeight突出是不正确的?

由于实际建设似乎并没有遭受当我运行它,我只是想知道,如果这东西在我的代码需要修复或东西在我的编辑,我可以忽略?

干杯您的帮助

+0

https://github.com/cloud9ide/typescript/blob/master/typings/lib.d.ts#L2410 – haim770

回答

2

你只需要投它:

calc(el:HTMLElement){ 
    this.height = el.offsetHeight; 
    this.width = el.offsetWidth; 

    let span:HTMLElement = <HTMLElement> el.querySelector("span"); 
    this.pos = span.offsetTop - span.offsetHeight; 
} 

或者你可以使用type assertion

let span:HTMLElement = el.querySelector("span") as HTMLElement; 

什么情况是,querySelector回报Element而不是HTMLElement为你宣称span的类型为。但是你可以告诉编译器“相信你”,你知道它确实是一个HTMLElement

您还可以使用HTMLSpanElement代替HTMLElement这是更具体的,就像HTMLElementElement更具体的(这就是为什么当你把它改为ElementoffsetTopoffsetHeight是不可用)。

+0

现在我觉得自己很蠢。多年来我一直是Flash开发人员,而这正是您在AS3中所做的。好吧,生活和学习。感谢您指出了这一点:) – popClingwrap

+3

' obj'和'OBJ时HTMLElement'是_both_类型的断言,有作为打字稿一个类型_cast_没有这样的事情。另外,AFAIK,后者现在是首选语法,因为前者在'.tsx'上下文中不明确。 –

+0

@JohnWhite很高兴知道,并没有意识到这一点 –