我可以在 Typescript 中编写强制转换运算符吗?
Can I write a cast operator in Typescript?
我使用 JSWEET 转译了一个大型 Java 项目。它已将 Enumeration
在 Java 世界中,可以将数组 Object[] 分配给 Enumeration
在 Typescript 中我得到:类型 'any[]' 不可分配给类型 'Enumeration<any>'
有没有一种方法可以扩展 Enumeration
您可以通过两种不同的方式投射:
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
class:
var doSomething = function <T>(a: Enumeration<T>) { };
doSomething(Enumeration.fromArray<User>(a));
我使用 JSWEET 转译了一个大型 Java 项目。它已将 Enumeration
在 Java 世界中,可以将数组 Object[] 分配给 Enumeration
在 Typescript 中我得到:类型 'any[]' 不可分配给类型 'Enumeration<any>'
有没有一种方法可以扩展 Enumeration
您可以通过两种不同的方式投射:
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
class:
var doSomething = function <T>(a: Enumeration<T>) { };
doSomething(Enumeration.fromArray<User>(a));