我可以指定从另一个类扩展的类的类型吗?

时间:2015-12-11 05:10:07

标签: typescript

在Typescript中,可以说“此变量的类型是特定的类而不是实例:”

const x: typeof Animal = Animal

泛型也可以说类型继承了另一种类型:

function myFunction<T extends Animal>(someAnimal: T) { /* ... */ }

我可以这两个并说“这个变量的类型是一个特定的类还是从该类继承的类”?

如果y有这种类型,那么我可以y = Animaly = Tiger

1 个答案:

答案 0 :(得分:3)

  

“此变量的类型是特定类或从该类继承的类

当你拥有x: typeof Animal 时,它已经接受了Animal或任何扩展Animal 的东西。这是因为TypeScript是结构化类型。

示例:

class Animal{
    animal: number;
};
class Tiger extends Animal{
    tiger: number;
};


let x: typeof Animal;
x = Animal;
x = Tiger;

为什么这是好主意有很多原因:https://basarat.gitbooks.io/typescript/content/docs/why-typescript.html

更新

基于评论

  

等一下。所以这绝对有效,但是像myFunction(x:typeof Animal)和myFunction(Tiger)这样的东西不起作用 - 它会给出不兼容类型的错误。为什么不呢?

它也有效。

class Animal{
    animal: number;
};
class Tiger extends Animal{
    tiger: number;
};

function iTakeAnimalClasses(x: typeof Animal){}
iTakeAnimalClasses(Animal);
iTakeAnimalClasses(Tiger);