Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “忽略类型脚本错误”;类型为“的值上不存在属性”;_Javascript_Typescript_Visual Studio 2013 - Fatal编程技术网

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

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上拨打任何您想要的

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

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


我发现许多类型为“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
    属性。这样,您仍然可以在其他属性上完成代码。而不是强制转换为任何to
    getBBox
    有什么方法可以正确地强制转换吗?想知道
    getBBox
    的类型吗?例如:如果
    getBBox
    将处于
    HTMLElement
    类型,您可以通过
    var typedElement=outerHtmlElement;
    将对象强制转换为它。很好!
    var坐标=(outerement[0])。getBBox
    这实际上并没有回答问题:“如何忽略错误”应该是
    //
    ,末尾带有自动关闭标记。我正在使用VS2015并遵循教程,因为我没有
    jquery.d.ts
    文件project@Dimple
    npm安装-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);