2016-10-04 5 views
2

JSWEETを使用して、大きなJavaプロジェクトを作成しました。それはEnumeration < Object>のような型をTypeScriptのAny>列挙<に直接変換しました。Typescriptでキャスト演算子を記述できますか?

Javaの世界では、オブジェクト[]をEnumeration < Object>に割り当てることができました。活字体で

私が取得:タイプ「は任意の[]」型に代入できません「列挙<任意の>」

は列挙<オブジェクトを拡張する方法>または[]活字体、このような方法ではありますこの割り当てを行うことができますか?

var doSomething = function <T>(a: Enumeration<T>) { }; 
var x: Object[] = []; 

// cast using "<>"" 
doSomething(<Enumeration<Object>>x); 

// cast using "as" 
doSomething(x as Enumeration<Object>); 

しかし、あなたのEnumerationはおそらくArrayを拡張する必要があります:あなたは2つの異なる方法でキャストすることができます

+1

Javaは 'Object []'を 'Enumeration 'に割り当てることはできませんが、Javaについての答えが不要なので、タグを削除することは決して少なくありません。 –

+0

「Javaの世界では配列Object []を列挙型に割り当てることができましたか?あなたが実際に 'Enumeration e = anArray;'をJavaで書こうとすると、タイプの不一致エラーが発生します。では、あなたの文脈はどうですか? –

+0

私はJavaからTypescriptを生成していますが、私はこれらの2つの型をJavaで割り当てることができたと私は推測しました。 C++/C#のようなスタイルのキャスト演算子は、Typescriptで書くことはできません。 –

答えて

0

interface Enumeration<T> extends Array<T> { 
    // ... 
} 

更新

class Enumeration<T> extends Array<T> { 
    private _cursor: number; 
    public constructor(...elements: T[]) { 
     super(...elements); 
     this._cursor = 0; 
    } 
    public nextElement() { 
     this._cursor = this._cursor + 1; 
     return this.values[this._cursor]; 
    }; 
    public hasMoreElements() { 
     return this._cursor < this.length - 1; 
    } 
    public static fromArray<T>(arr: T[]) { 
     return new Enumeration<T>(...arr); 
    } 
} 

interface User { 
    name: string; 
} 

let a: Array<User> = [{ name: "user1" }, { name: "user2" }]; 
let b: Enumeration<User> = new Enumeration({ name: "user1" }, { name: "user2" }); 

a = b; // OK: Enumeration<User> is assignable to Array<User> 
b = a; // Error: Array<User> is not assignable to Enumeration<User> 

たぶん、あなたが方法fromArrayを追加することができます列挙クラス:

var doSomething = function <T>(a: Enumeration<T>) { }; 
doSomething(Enumeration.fromArray<User>(a)); 
+0

私は配列を拡張することを考えていませんでした。 EnumerationからArrayへの割り当てを他の方向に一方向に許可することはできませんか? –

+0

割り当ては一方向のみで動作しますが、 'fromArray'メソッドを' Enumeration'クラスに追加できますか?私の更新を参照してください。 –

+0

内在オブジェクトを拡張することは、Typescriptが私が探しているものに近づくように見えます。 –

関連する問題