在 typescript 中编写自定义强制转换

yi0zb3m4  于 2023-01-03  发布在  TypeScript
关注(0)|答案(1)|浏览(122)

在C#中,我们可以通过implicitexplicit运算符重载来实现自定义类型转换。例如:

public class A {
    public string Name {get; set;}
    public static implicit operator A(B b) {
        A a = new A();
        a.Name = b.PhoneNumber;
        return a;
    }
}

这允许使用将B强制转换为A,类似于B b = new B(); A a = b;
有没有办法在 typescript 中做到这一点,使给定的以下类型:

class A {
    name?: string | null | undefined;
}
class B {
    phoneNumber?: string | null | undefined;
}

B可以通过以下方式强制转换为A

const b: B = { phoneNumber: "1234" }
const a: A = (A)b
9wbgstp7

9wbgstp71#

在C#中,我们可以通过隐式或显式运算符重载实现自定义类型转换
TypeScript中没有运算符重载
为什么?
因为JavaScript中没有运算符重载。TypeScript不喜欢添加JavaScript不支持的运行时特性。

备选方案

在类A中创建静态方法

class A {
    name?: string | null | undefined;
    static fromB(value: B): A {
      // ... TODO
    }
}
class B {
    phoneNumber?: string | null | undefined;
}

const b: B = { phoneNumber: "1234" }
const a: A = A.fromB(b)

PS:我更喜欢静态函数而不是运算符重载,即使JavaScript支持它😄

相关问题