Answers:
我知道这个问题已经结束,但是我发现它正在搜索相同的TypeScriptException,也许其他人在搜索这个问题时遇到了这个问题。
问题在于缺少TypeScript输入:
var coordinates = outerElement[0].getBBox();
投掷 The property 'getBBox' does not exist on value of type 'HTMLElement'.
最简单的方法是将变量显式键入为 any
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
由于TypeScript 1.6首选的强制转换运算符是as
可以将这些行压缩为优美的行:
let coordinates = (outerElement[0] as any).getBBox();
当然,如果您想做对了,有时候这是一个过大的杀伤力,则可以:
HTMLElement
HTMLElement
getBBox
除了强制转换之外,还有什么方法可以强制转换?想找出类型getBBox
?
getBBox
是在HTMLElement
类型,你可以通过把对象给它var typedElement = <HTMLElement> outerHtmlElement;
。
var coordinates = (<any>outerElement[0]).getBBox();
快速而肮脏的解决方案是显式转换为 any
(y as any).x
“优势”在于,强制类型转换是显式的,即使noImplicitAny
设置了标志也可以编译。
正确的解决方案是更新类型定义文件。
请注意,将变量强制转换为时any
,您选择不对该类型进行类型检查。
由于我处于免责声明模式,因此any
在您遇到以下情况时,通过与新界面结合使用双重强制转换非常有用
但是,您仍然需要某种形式的键入。
说要修补的一个实例的定义y
类型的OrginalDef
一个新的属性x
类型number
:
const y: OriginalDef = ...
interface DefWithNewProperties extends OriginalDef {
x: number
}
const patched = y as any as DefWithNewProperties
patched.x = .... //will compile
有几种方法可以解决此问题。如果此对象与某个外部库相关,则最佳解决方案是找到该库的实际定义文件(此处为大存储库)并对其进行引用,例如:
/// <reference path="/path/to/jquery.d.ts" >
当然,这在许多情况下并不适用。
如果要“覆盖”类型系统,请尝试以下操作:
declare var y;
这样您就可以拨打任何电话了var y
。
/// <reference path="/path/to/jquery.d.ts" />
在结尾处带有自动关闭标签
npm install -g tsd
然后tsd install jquery
当打字稿认为,财产的“X”上不存在“Y”,那么你可以随时施放“Y”为“任何”,这将允许您调用任何东西(如“x”)上的“Y”。
理论
(<any>y).x;
真实的例子
我收到此代码的错误“ TS2339:类型'功能'上不存在属性'名称'”:
let name: string = this.constructor.name;
所以我用:
let name: string = (<any>this).constructor.name;
Angular2中出现问题,我正在使用本地存储来保存某些内容,但它不允许我这样做。
解决方案:
我有 localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.
解决方法:
localStorage ['city']
(localStorage).city
(localStorage任意).city
<any>
- 则可以使用(<any>localStorage).city
。
一种快速解决其他问题的方法:
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
不好的做法,但是提供了一种解决方案,而无需关闭无字符串文字
HTMLElement
并具有附加getBBox
属性的接口。这样,您仍然可以在其他属性上获得代码完成。