TypeScript数组的别名

时间:2013-02-18 15:39:48

标签: c# javascript typescript

我想将以下C#代码翻译成TypeScript

[JsType(JsMode.Json)]
public class position : JsArray<JsNumber>
{
}

[JsType(JsMode.Json)]
public class coordinateArray : JsArray<position>
{
}

[JsType(JsMode.Json)]
public class polygonRings : JsArray<coordinateArray>
{
}

我试着这样做:

export interface position {
    (): number[];
}

export interface coordinateArray {
    (): position[];
}

export interface polygonRings {
    (): coordinateArray[];
}

但是当我尝试施展它时,我遇到了一些问题:

  

无法将'coordinateArray'转换为'position []'。

在代码中:

(<position[]> lineString.coordinates).push(position);

2 个答案:

答案 0 :(得分:2)

export interface coordinateArray {
    (): position[];
}

您所描述的不是数组,它是一种函数类型,在调用时会返回一个数组:

var x: coordinateArray = ...;
var y = x(); // y: position[]

您可能想要定义索引签名:

export interface coordinateArray {
    [index: number]: position;
}

这不会直接转换为position[],因为它实际上并不是一个数组(真正的position[]会有splicepush等方法,但是{{ 1}}没有),但至少对于类型的形状是正确的。

答案 1 :(得分:1)

coordinateArray的实例上调用构造函数方法将返回类型position[],但是使用接口作为类型将不会为您提供与position[]兼容的内容。

如果你有其他工作的代码,除了编译器警告,你可以使用以下方法更好地告诉编译器:

(<position[]><any> ca)