忽略类型脚本错误“属性在类型的值上不存在”

在VS2013中,当tsc退出代码1时,建筑物停止。VS2012并非如此。

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

我收到许多错误,我想在使用javascript函数时忽略这些错误。The property 'x' does not exist on value of type 'y'


答案 1

我知道这个问题已经关闭了,但我发现它搜索相同的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();

编辑,2016 年末

从 TypeScript 1.6 开始,首选的转换运算符是 ,因此这些行可以压缩为:as

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


其他解决方案

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

  1. 创建自己的界面,简单地扩展HTMLElement
  2. 引入自己的打字,扩展HTMLElement

答案 2

快速而肮脏的解决方案是显式转换为any

(y as any).x

“优点”是,强制转换是显式的,即使设置了标志,这也将进行编译。noImplicitAny

正确的解决方案是更新类型定义文件。

请注意,将变量转换为 时,请选择不对该变量进行类型检查。any


由于我处于免责声明模式,因此通过结合新界面进行双重转换在以下情况下很有用:any

  • 您不想更新损坏的打字文件
  • 和/或您正在修补猴子

然而,你仍然需要某种形式的打字。

假设您要使用类型为 的新属性修补类型实例的定义:yOrginalDefxnumber

const y: OriginalDef = ...

interface DefWithNewProperties extends OriginalDef {
    x: number
}

const patched = y as any as DefWithNewProperties

patched.x = ....   //will compile