首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用打字稿写个演员吗?

我能用打字稿写个演员吗?
EN

Stack Overflow用户
提问于 2016-10-04 12:02:33
回答 1查看 1.3K关注 0票数 3

我使用JSWEET来传输一个大型Java项目。它在TypeScript中直接将枚举之类的类型转换为枚举。

在Java世界中,可以将数组Object[]分配给枚举。

在打字稿中,我得到:键入'any[]‘不能指定输入’枚举‘

是否有一种方法可以扩展枚举或any[],使TypeScript允许进行此赋值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 12:11:29

您可以通过两种不同的方式进行转换:

代码语言:javascript
复制
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

代码语言:javascript
复制
interface Enumeration<T> extends Array<T> {
    // ...
}

更新

代码语言:javascript
复制
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

代码语言:javascript
复制
var doSomething = function <T>(a: Enumeration<T>) { };
doSomething(Enumeration.fromArray<User>(a));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39851793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档