Typescript中传入泛型能否带有泛型?

雾秋
  • 1.4k

可能说的不太明白,就是我想传一个泛型参数,然后该参数依然可以接收一个泛型来返回最终的类型。

type A<T> = {
    z: T,
    x: string
}


type B<T> = {
    zzz: T,
    a:string,
    b:number,
    c:number
}


// 当我声明一个类的时候,能否将A或者B 当作泛型带给 Class,然后在写某个函数的时候再接收一个传入的泛型获取真实值


class Test<BaseT>{
    getSome<T>(){
        // BaseT<T> 会提示 Type 'BaseT' is not generic.(2315)
        return new Promise<BaseT<T>>((resolve, reject)=>{
            // 因为消息是不可控的,所以想用BaseT<T>的组合来实现
            const xx:any = 111
            resolve(xx)
        })
    }
}


const test = new Test<B>() // 这里也会提示 Generic type 'B' requires 1 type argument(s).(2314)
test.getSome<number>()

当前写法无法满足我的需求,有没有什么其他的写法能够满足?

回复
阅读 656
2 个回答

当前的 Typescript 还不支持使用泛型当作类型参数使用,不过你的这个需求还是可以解决的,只是需要稍微变通一下.

如下:

interface BaseTypes {
  A<T>: { a: T; x: string }
  B<T>: { zzz: T; a: string; b: number; c: number }
}

class Test<K extends keyof BaseTypes<void>> {
  getSome<T>() {
    // BaseT<T> 会提示 Type 'BaseT' is not generic.(2315)
    return new Promise<BaseTypes<T>[K]>((resolve, reject) => {
      // 因为消息是不可控的,所以想用BaseT<T>的组合来实现
      const xx: any = 111
      resolve(xx)
    })
  }
}

const test = new Test<'B'>()

const result = test.getSome<number>()

Playground

宣传栏