请问ts中如何声明一个可以相加的类型呢?

// 这是类型现有的声明
export function Vector(x: number = 0, y: number = 0, z: number = 0): Vector{
    return {x,y,z}
};

declare global {
    type Vector = {
        x: number;
        y: number;
        z: number;
        Normalized():Vector
        Length():number
    };
}

我希望他能允许我写

let a = Vector(12,20,0)
let b = Vector(100,0,-50)
console.log("a+b", a+b ) // {112,20,-50}
console.log("a-b", a-b ) // {-88,20,50}

这种自定义类型的相加 改如何定义呢?

==================
用的是ts2lua,在lua中用__add实现了相加的运算。但是ts上不知道该怎么申明,使得它可以像String /Number类型一样相加且静态检查中不报错
我现在只能这样写,但这样肯定是不理想的,希望把as Vector 拿掉

let a = Vector(12,20,0)
let b = Vector(100,0,-50)
let c = a+b as Vector
console.log("取模 a+b", c.Normalized() )
// { 0.90123515922583, 0.16093484986176, -0.40233712465439 }
console.log("长度 a+b", c.Length() )
// 124.27389106325
阅读 1.8k
1 个回答

这个叫 operator overloading, typescript并不支持

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏