typescript 类型问题

2019-01-25 14:46:19 +08:00
 azh7138m

泛型的参数是个泛型的话,要怎么写呢?

class Foo<T> {
  echo(bar: T) {
    return bar
  }
}

function box(klass) {
  return klass
}


const wraped = box(Foo)

想让 wraped 类型是

class <T> {
  echo(bar: T): void
}

Playground

相关 issue

Allow classes to be parametric in other parametric classes

3338 次点击
所在节点    问与答
22 条回复
wly19960911
2019-01-25 16:18:24 +08:00
@chengluyu #18 我试了下的确不错,但是问题就在于这个 泛型了,你的例子很适合基础类型的扩展,但是基础类型没意义啊。

但是如果我进行一次继承操作 lz 所说的灵活性就行了,主要现在 echo 方法难道这么广泛的需要 mixin 进去吗。

否则 echo 里面需要执行什么操作呢,我也在好奇。我是不是说如果这么广泛的时候我直接写个静态方法提取出来操作就可以了?初学只是讨论下。

https://www.typescriptlang.org/play/index.html#src=class%20Foo%3CT%20extends%20Human%3E%20%7B%0D%0A%20%20%20%20constructor(readonly%20data%3A%20T)%20%7B%7D%3B%0D%0A%20%20%20%20echo()%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20this.data.name%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Aclass%20Human%20%7B%0D%0A%20%20%20%20name%20%3D%20'213'%3B%0D%0A%7D%0D%0A%0D%0Afunction%20box%3CK%3E(f%3A%20K)%3A%20K%20%7B%0D%0A%20%20%20%20return%20f%3B%0D%0A%7D%0D%0A%0D%0Aconst%20WrappedBar%20%3D%20box(Foo)%3B%0D%0A%0D%0Aconst%20a%20%3D%20%20new%20WrappedBar(new%20Human())%3B%0D%0A%0D%0Aa.echo()%3B%0D%0A
azh7138m
2019-01-25 17:44:23 +08:00
@chengluyu
@momocraft
是需要一个泛型,不要一个实例化后的类型,对应实际问题在附言中。

是 react 下的一个场景,我希望 injectSheet 之后的类型是一个泛型,主要是这种需求,比如这种场景
https://ant.design/components/table-cn/#%E5%9C%A8-TypeScript-%E4%B8%AD%E4%BD%BF%E7%94%A8
我希望 columns 与 dataSource 之间的类型是经过校验的,也就是希望导出的类仍然是一个泛型

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

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

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

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

© 2021 V2EX