我已经使用JSWEET来传输大型Java项目。它在TypeScript中将枚举类型< Object>直接转换为枚举类型< any>。我可以在Typescript中编写一个演员操作符吗?
在Java世界中,可以将一个数组Object []赋给一个Enumeration < Object>。
在打字稿我得到:类型“任何[]”是不能分配给键入“枚举<任何>”
有没有办法来扩展枚举<对象>或[]以这样的方式打字稿将允许这项任务发生?
我已经使用JSWEET来传输大型Java项目。它在TypeScript中将枚举类型< Object>直接转换为枚举类型< any>。我可以在Typescript中编写一个演员操作符吗?
在Java世界中,可以将一个数组Object []赋给一个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
:
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));
我没想过扩展Array
赋值只能在一个方向上工作,但也许你可以在'Enumeration'类中添加一个'fromArray'方法?查看我的更新。 –
扩展内在对象似乎与Typescript达到我正在寻找的一样接近。 –
Java不允许你为'Enumeration
你能告诉我更多关于你的意思吗?“在Java世界中,可以将一个数组Object []指定给枚举
我从Java生成Typescript,但是我在我的一些附加部分中犯了一个错误,导致我推测可以在Java中分配这两种类型。虽然看起来不像C++/C#样式转换操作符可以用Typescript编写。 –