问大家一个问题, TypeScript 中函数怎么以类而不是实例作为形参

2018-02-09 17:38:59 +08:00
 qiuyk

可能题目说得比较抽象,例如我们有个类:

class Dog {
  private name: string;
  public constructor(name: string) {
    this.name = name;
  }
  public getName(): string {
    return this.name;
  }
}

然后我有一个函数,接受类作为参数,返回一个对象:

function createDog(constructor: Dog): Dog {
   return new construtor('Teddy');
}

const teddy: Dog = createDog(Dog);

但是大家知道这样编译是会报错的,因为createDog接受的是 Dog 实例。我不想用 any,想把我的类限定在 Dog,想问一下createDog(constructor: Dog)应该怎么写才能实现我的需求。

4356 次点击
所在节点    Node.js
6 条回复
gucheen
2018-02-09 17:44:34 +08:00
createDog(constructor: typeof Dog)

createDog(constructor: new(name: string) => Dog)

或者建一个对应 Dog 的 interface
sunjourney
2018-02-09 18:10:51 +08:00
interface DogCreator {
new(name: string): Dog
}

function createDog(constructor: DogCreator): Dog {
return new constructor('Teddy');
}

你的单词写错了,看得我很难受。。。
sunjourney
2018-02-09 18:12:42 +08:00
另外,没必要这样写,perfer DI over FactorCreator
sunjourney
2018-02-09 18:12:58 +08:00
FactoryCreator
VDimos
2018-02-09 18:13:18 +08:00
typescript 文档里面有提到的,在接口那一章。
interface Test {
new constructor():Dog
}
这样就行了
qiuyk
2018-02-09 22:43:06 +08:00
@sunjourney 哈哈 其实只是举个例子 也没想用工厂 只是这边实现有个形参需要传个构造函数而已 谢谢啦(本来想礼貌性道歉 结果你也拼错了 2333333 )

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

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

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

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

© 2021 V2EX