在VS2013中,当tsc使用代码1退出时,构建停止。但在VS2012中却不是这样。
如何在忽略tsc.exe错误的情况下运行我的解决方案?
我得到许多属性'x'不存在的值类型'y'错误,我想忽略使用javascript函数时。
在VS2013中,当tsc使用代码1退出时,构建停止。但在VS2012中却不是这样。
如何在忽略tsc.exe错误的情况下运行我的解决方案?
我得到许多属性'x'不存在的值类型'y'错误,我想忽略使用javascript函数时。
当前回答
你也可以使用下面的技巧:
Y.x = "some custom property"//给出typescript错误
Y ["x"] = "some custom property"//没有错误
注意,要访问x并且不再得到typescript错误,你需要像y["x"]那样写它,而不是y.x。所以从这个角度来看,其他选项更好。
其他回答
其他方法都不管用的快速解决方法:
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
这不是一个好的实践,但提供了一个解决方案,而不需要关闭no-string-literal
我知道现在已经是2020年了,但我找不到一个能满足这个问题“忽略”部分的答案。事实证明,你可以用一个指令告诉TSLint这样做;
// @ts-ignore
this.x = this.x.filter(x => x.someProp !== false);
通常这会抛出一个错误,指出“someProp在类型上不存在”。有了注释,错误就消失了。
这将阻止编译时抛出任何错误,也应该停止IDE对您的抱怨。
我能够在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的键并进行编译的唯一方法。
当TypeScript认为属性“x”在“y”上不存在时,那么你总是可以将“y”转换为“any”,这将允许你在“y”上调用任何东西(比如“x”)。
理论
(<any>y).x;
现实世界中的例子
我得到了这个代码的错误“TS2339:属性“名称”在类型“函数”上不存在”:
let name: string = this.constructor.name;
所以我用:
let name: string = (<any>this).constructor.name;
在Angular2中有一个问题,我正在使用本地存储来保存一些东西,它不允许我这样做。
解决方案:
我有localStorage。city ->错误->属性“city”在“Storage”类型上不存在。
如何解决:
localStorage(城市的) (localStorage) .city (localStorage as any).city