如何在迭代泛型集合的时候精确获取类型啊?东西有点儿多,大佬们给解惑

2020-03-05 01:47:27 +08:00
 cs3230524

例如:

declare class Animal<State = any>{
    life: number
    state: State
    setState(newState: State): void;
}

declare class Dog<state = any> extends Animal<state>{
    name: string
}

declare class State {
    synchronize: any
}

class Mystate extends State {
    MyBalabalaState: string
}

class MyOtherstate extends State {
    MyBalabalaState: string
}

class Labrador<Mystate=any> extends Dog<Mystate> {
    balbala: string
}

class ChineseDog<MyOtherstate=any> extends Dog<MyOtherstate> {
    balbala: string
}

function test() {
    let mydog = new Labrador<Mystate>();
    let mydog2 = new ChineseDog<MyOtherstate>();

    let mydogState = new Mystate();
    mydog.setState(mydogState);

    let myDogOtherState=new MyOtherstate();
    mydog2.setState(myDogOtherState)

    //我的目的是想在循环泛型的时候能点出具体的提示
    //可以实现吗?不知道怎么搞了。

    //这里 map 要怎么定义才能获得 mydog 里面具体的 state 啊?
    let map=new Map<string,Dog<State>>();//这样定义好像不行,在循环的时候不能获取属性
    map.set("dog1",mydog);
    map.set("dog2",mydog2);

    //还有,这个循环不能指定具体类型吗?
    for (const dog of map.values()) {
        //我想在写代码的阶段就能获取到具体的类型,可以实现吗?

    }
}
1322 次点击
所在节点    TypeScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649956

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX