接口中的typescript变量是否可以声明为a或B类型

接口中的typescript变量是否可以声明为a或B类型,typescript,Typescript,我们正在设置类构造函数,以获取复制构造函数的类接口。所以基本上: interface IPoint { var x : number; var y : number; } class Point implements IPoint { var x : number; var y : number; constructor (src : IPoint) { this.x = src.x; this.y = src.y;

我们正在设置类构造函数,以获取复制构造函数的类接口。所以基本上:

interface IPoint {
    var x : number;
    var y : number;
}

class Point implements IPoint {
    var x : number;
    var y : number;

    constructor (src : IPoint) {
        this.x = src.x;
        this.y = src.y;
    }

    public getTotal() : number {
        return x + y;
    }
}
我们之所以这样做,是因为我们从REST服务器以JSON的形式获取这些对象,并且还将这些对象传递给web工作者。在这些情况下,我们接收的对象是接口,我们有数据,但没有方法。无论是从完整对象创建一个复制构造函数,还是仅从JSON创建一个复制构造函数,复制构造函数都非常有效

但我们遇到了以下情况的问题:

interface IPoint {
    var coordinates : (List or number[])
}

class Point implements IPoint {
    var coordinates : List

    constructor (src : IPoint) {
        // do an isArray() to initialize
    }

    public getTotal() : number {
        return // sum of all coordinates in the list
    }
}
当我们从JSON获取对象时,坐标是一个数组。在对象中,它是一个列表(来自collections.ts)


我们目前正在界面中定义“坐标:any”,它确实起作用。但它确实应该始终是两种类型中的一种。有没有办法这样声明?在运行时这样做没有什么区别,但它确实有助于更好的类型检查。

我的建议是为坐标(列表或数字[])定义一个集合类型,并确保构造函数可以接受其中一种,然后将任何输入转换为您需要的类型。

我的建议是为坐标定义一个集合类型(列表或数字[]),并确保构造函数可以接受其中一种,然后将任何输入转换为您需要的类型。

我的建议是为坐标定义一个集合类型(列表或数字[]),并确保构造函数可以接受其中一种,然后将任何输入转换为您需要的类型。

我的建议是为坐标定义一个集合类型(列表或数字[]),并确保构造函数可以接受任何一种,然后将任何输入转换为您需要的类型。

,假设
List
支持
[]
运算符,则可以执行以下操作:

interface IIndexable<T> {
    [index: number]: T
}

interface IPoint {
    coordinates : IIndexable<number>
}
接口IIndexable{
[索引:编号]:T
}
接口IPoint{
坐标:IIndexable
}

好吧,假设
List
支持
[]
操作符,您可以这样做:

interface IIndexable<T> {
    [index: number]: T
}

interface IPoint {
    coordinates : IIndexable<number>
}
接口IIndexable{
[索引:编号]:T
}
接口IPoint{
坐标:IIndexable
}

好吧,假设
List
支持
[]
操作符,您可以这样做:

interface IIndexable<T> {
    [index: number]: T
}

interface IPoint {
    coordinates : IIndexable<number>
}
接口IIndexable{
[索引:编号]:T
}
接口IPoint{
坐标:IIndexable
}

好吧,假设
List
支持
[]
操作符,您可以这样做:

interface IIndexable<T> {
    [index: number]: T
}

interface IPoint {
    coordinates : IIndexable<number>
}
接口IIndexable{
[索引:编号]:T
}
接口IPoint{
坐标:IIndexable
}
但它确实应该始终是两种类型中的一种

联合类型仍需在typescript中实现

如您所知,您可以使用
任意
,也可以使用两个不同类型的变量并进行适当的赋值

但它确实应该始终是两种类型中的一种

联合类型仍需在typescript中实现

如您所知,您可以使用
任意
,也可以使用两个不同类型的变量并进行适当的赋值

但它确实应该始终是两种类型中的一种

联合类型仍需在typescript中实现

如您所知,您可以使用
任意
,也可以使用两个不同类型的变量并进行适当的赋值

但它确实应该始终是两种类型中的一种

联合类型仍需在typescript中实现


如您所知,您可以使用
任意
,也可以使用两个不同类型的变量并进行适当的赋值

typescript中没有运算符重载。(应该有,但没有)我没有说操作符可以重载,我说你可以围绕它构建一个接口。例如,
Array
具有上述接口。请参阅第3.7.4节,typescript中没有运算符重载。(应该有,但没有)我没有说操作符可以重载,我说你可以围绕它构建一个接口。例如,
Array
具有上述接口。请参阅第3.7.4节,typescript中没有运算符重载。(应该有,但没有)我没有说操作符可以重载,我说你可以围绕它构建一个接口。例如,
Array
具有上述接口。请参阅第3.7.4节,typescript中没有运算符重载。(应该有,但没有)我没有说操作符可以重载,我说你可以围绕它构建一个接口。例如,
Array
具有上述接口。请参见第3.7.4节