首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript能表达一个类中静力学的亚型多态性吗?

TypeScript能表达一个类中静力学的亚型多态性吗?
EN

Stack Overflow用户
提问于 2017-06-07 15:11:22
回答 1查看 293关注 0票数 0

我正在寻找一种用ts编写实现的方法,它能够拒绝一些带有查找类型的语句

有了这种执行:

代码语言:javascript
复制
function animalDecorator <O extends propertyof Animal>(property: O) {
// should allow only properties from
// a class that extends from Animal

}

class Animal { }

class Cat extends Animal {
  static claws: any
}

class Stone {
  static shape: any
}

然后,键入以下代码,只有第一条语句才有效。

代码语言:javascript
复制
animalDecorator(Cat.claws) //allow
animalDecorator(Stone.shape) //deny
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 16:07:00

您可以使用typeof操作符来获取类的静态侧的类型。

换句话说,您可以将您的函数声明为

代码语言:javascript
复制
function animalDecorator(target: typeof Animal, property: any) { /*...*/ }

如果您想以某种方式使用target类型,可以使用泛型:

代码语言:javascript
复制
function animalDecorators<T extends typeof Animal>(target: T, property: any): T { /*...*/ }

最后,无法限制任意位置的值,但可以将函数限制为属性名称,如:

代码语言:javascript
复制
function animalDecorators<T extends typeof Animal>(target: T, property: keyof T) { /*...*/ }

这样您就可以编写animalDecorator(Cat, "claws"),而不是animalDecorator(Cat, "shape")

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44416525

复制
相关文章

相似问题

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