我目前正在尝试设置“ AdvancedString”类。此类应通过诸如isJSON。目前看起来像这样
class AdvancedString extends String {
isJSON():boolean{
var itIs = true;
try{
JSON.parse(this.toString());
} catch (err) {
itIs = false;
}
return itIs;
}
}
export{ AdvancedString}
现在它不会太糟糕。如果我用“ SampleString”创建一个新实例,我会得到
let sample = new AdvancedString("SampleString");
// ExtendedString {[[PrimitiveValue]]: "SampleString"}
如果我做toString我得到正确的值
sample.toString()
// "SampleString"
但是我希望它在直接调用时表现得像普通字符串一样
sample === "SampleString"
// should return true and sample.toString() === "SampleString"
// should not be necessary
有没有什么办法可以在TypeScript中完成此操作?我想使用一个单独的类,而不是将我的方法添加到字符串原型中
最佳答案
不幸的是,这是不可能的。对象仍然是对象,而不是原始值(字符串)的===
。
相信我,我已经在这个问题上花费了数十个小时,您根本无能为力。
您可以变异String.prototype.isJSON
String.prototype.isJson = () => 'your logic here'
但这不是一个很干净的解决方案,除非您确定此代码仅保留在您的应用程序内。
附言Typescript与此问题无关。