0

私は次のようなモジュールを作成しました:

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

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

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

    export class GeometryType {
        public static Point: string = "Point";
        public static LineString: string = "LineString";
        public static Polygon: string = "Polygon";
        public static MultiPoint: string = "MultiPoint";
        public static MultiLineString: string = "MultiLineString";
        public static MultiPolygon: string = "MultiPolygon";
        public static MultiGeometry: string = "MultiGeometry";
    }

    export interface Geometry {
        type?: string;
    }

    export interface Point extends Geometry {
        coordinates: position;
    }

    export interface LineString extends Geometry {
        coordinates: coordinateArray;
    }

    export interface Polygon extends Geometry {
        coordinates: polygonRings;
    }

    export interface MultiPolygon extends Geometry {
        coordinates: polygonRings[];
    }

    export interface MultiPoint extends Geometry {
        coordinates: coordinateArray;
    }

    export interface MultiLineString extends Geometry {
        coordinates: polygonRings;
    }

    export interface GeometryCollection extends Geometry {
        geometries: Geometry[];
    }
}

私がそれを使うとき、私は愚かなエラーを受け取ります。それpushは未解決の方法です...

var lineString: GeoJSON.LineString = <GeoJSON.LineString> this._myGeometry;
lineString.coordinates.push(position);

に座標をキャストしてみましたGeoJSON.position[]。コードはコンパイルされますがJavaScript、エラーがスローされます:(

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

pushここで見えるようにする方法は?のタイプをcoordinatesからcoordinateArrayに変更することはできませんposition[]。後でJSON.stringify別のJSONデータが返され、サーバーが応答しないためです。

4

2 に答える 2

1

明確にするために、これを書くとき:

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

あなたが説明しているのは、call signatureを持つ型です。()これは、「これが私です」ではなく、「引数なしで私を呼び出すことができます」という意味です。コンパイラは、次のように使用することを期待していますcoordinateArray

var x: coordinateArray = /* something */;
var y = x(); // y: position[]
于 2013-03-21T15:52:11.250 に答える