我目前正在尝试设置“ 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与此问题无关。

08-08 00:50