Javascript “忽略类型脚本错误”;类型为“的值上不存在属性”;
在VS2013中,当tsc以代码1退出时,建筑停止。VS2012的情况并非如此 如何在忽略tsc.exe错误的情况下运行解决方案Javascript “忽略类型脚本错误”;类型为“的值上不存在属性”;,javascript,typescript,visual-studio-2013,Javascript,Typescript,Visual Studio 2013,在VS2013中,当tsc以代码1退出时,建筑停止。VS2012的情况并非如此 如何在忽略tsc.exe错误的情况下运行解决方案 我发现许多类型为“y”的值上不存在属性“x”错误,我希望在使用javascript函数时忽略这些错误。有几种方法可以处理此问题。如果此对象与某个外部库相关,最好的解决方案是找到该库的实际定义文件(大型存储库)并引用它,例如: /// <reference path="/path/to/jquery.d.ts" > 这将允许您在var y上拨打任何您想要的
我发现许多类型为“y”的值上不存在属性“x”错误,我希望在使用javascript函数时忽略这些错误。有几种方法可以处理此问题。如果此对象与某个外部库相关,最好的解决方案是找到该库的实际定义文件(大型存储库)并引用它,例如:
/// <reference path="/path/to/jquery.d.ts" >
这将允许您在
var y
上拨打任何您想要的电话。我知道问题已经解决,但我发现它正在搜索同一个TypeScriptException,可能其他人在搜索此问题时点击了此问题。
问题在于缺少类型脚本键入:
var coordinates = outerElement[0].getBBox();
抛出类型为“HTMLElement”的值上不存在属性“getBBox”。
最简单的方法是显式地将变量键入'any'`
var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();
编辑,2016年末
由于TypeScript 1.6,首选的强制转换运算符是as
,因此这些行可以压缩为:
let coordinates=(outerement[0]如有)。getBBox()代码>
其他解决方案
当然,如果你想把它做好,这有时是一种过分的做法,你可以:
创建自己的接口,该接口仅扩展HTMLElement
介绍扩展HTMLElement
您还可以使用以下技巧:
y.x=“某些自定义属性”//typescript错误
y[“x”]=“某些自定义属性”//no errors
请注意,要访问x
并不再出现打字脚本错误,您需要像y[“x”]
那样编写,而不是y.x
。因此,从这个角度来看,其他选项更好。在我的特定项目中,我无法让它工作,而使用了declare var$代码>不是一个干净/推荐的解决方案,它不能识别JQuery变量,但我在使用该变量后没有出现任何错误(我的自动构建必须成功)。快速而肮脏的解决方案是显式地强制转换到any
(y as any).x
“优点”是,强制转换是显式的,即使设置了noImplicitAny
标志,它也可以编译
正确的解决方案是更新打字定义文件
请注意,当您将变量强制转换为any
时,您选择退出该变量的类型检查
由于我处于免责声明模式,通过any
与新界面结合使用的双重强制转换在您
- 不想更新损坏的打字文件
- 猴子在打补丁吗
然而,您仍然需要某种形式的键入
假设您希望使用类型为number
的新属性x
修补类型为OrginalDef
的y
实例的定义:
const y: OriginalDef = ...
interface DefWithNewProperties extends OriginalDef {
x: number
}
const patched = y as any as DefWithNewProperties
patched.x = .... //will compile
Angular2出现问题,我正在使用本地存储来保存某些内容,但它不允许我这样做
解决方案:
我有localStorage.city->错误->属性“city”在类型“Storage”上不存在。
如何修复它:
本地存储[“城市”]
(本地存储)。城市
(本地存储,如有)。城市
当TypeScript认为属性“x”在“y”上不存在时,您可以将“y”强制转换为“any”,这将允许您在“y”上调用任何东西(如“x”)
理论
(<any>y).x;
所以我用以下方法解决了这个问题:
let name: string = (<any>this).constructor.name;
let name:string=(this).constructor.name;
我能够在typescript中使用类似以下内容来克服这个问题:
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=newmap();
对于(var i=0;i一个其他方法都不起作用的快速修复:
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
这不是一个好的实践,但提供了一个不需要关闭无字符串文本的解决方案。我知道现在是2020年,但我看不到满足问题“忽略”部分的答案
// @ts-ignore
this.x = this.x.filter(x => x.someProp !== false);
通常这会抛出一个错误,声明“someProp在类型上不存在”。通过注释,该错误消失
这将停止编译时抛出的任何错误,也应该停止IDE对您的抱怨。您还可以创建一个扩展HTMLElement
的接口,并具有附加的getBBox
属性。这样,您仍然可以在其他属性上完成代码。而不是强制转换为任何togetBBox
有什么方法可以正确地强制转换吗?想知道getBBox
的类型吗?例如:如果getBBox
将处于HTMLElement
类型,您可以通过var typedElement=outerHtmlElement;
将对象强制转换为它。很好!var坐标=(outerement[0])。getBBox
这实际上并没有回答问题:“如何忽略错误”应该是//
,末尾带有自动关闭标记。我正在使用VS2015并遵循教程,因为我没有jquery.d.ts
文件project@Dimplenpm安装-g tsd
然后tsd安装jquery
第二个选项(declare var y)在从JavaScript迁移到TypeScript时非常有效,并且希望避免TS2304错误,因为您的旧JavaScript正在引用另一个JavaScript文件中的变量。谢谢!对我来说,问题在于Jest,const mockPrompt:any=Jest.spyOn(步骤“prompt”);感谢这一帮助:导入http=require('http'));var server=http as any;server.server(app);//忽略ts错误!我在“确保在NodeRequire上找不到属性”中使用了它。因此我在NodeRequired和(require as any)上声明了我的require变量。确保属性。希望这能有所帮助。有人知道为什么这样做,以及这对我有什么潜在的影响或好处吗
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
// @ts-ignore
this.x = this.x.filter(x => x.someProp !== false);