我可以在Typescript中编写一个强制转换操作符吗?

时间:2016-10-04 12:02:34

标签: typescript jsweet

我使用JSWEET来转换大型Java项目。它已转换类型,如Enumeration< Object>直接到枚举< any>在TypeScript中。

在Java世界中,可以将数组Object []分配给Enumeration< Object>。

在Typescript中我得到:类型'any []'不能分配给'Enumeration< any>'

有没有办法扩展Enumeration< Object>或任何[]以这种方式,TypeScript将允许这种分配发生?

1 个答案:

答案 0 :(得分:0)

你可以用两种不同的方式进行投射:

(complete) => { this.exampleProductService.bar(complete).// rest of code } 

但您的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

更新

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