TypeScript中的“extends A”和“extends typeof A”有什么區別?

我做了一個類裝飾器,我想限制這個裝飾器只能應用于某些類,所以我做了:

@decorator()
class A {
    foo:string;
}
@decorator()
class B extends A {

}
@decorator()
class C {}

function decorator () {
  // This makes decorators work on class A and B except class C
  return function<T extends typeof A> (target:T) {}
  // This makes decorators become error on all the classes
  // return function<T extends A> (target:T) {}
}

如果我把function<T extends typeof A> (target:T) {}改成function<T extends A> (target:T) {},那么所有的裝飾器都會變成錯誤。

我不知道為什么我要用extends typeof A而不是extends A?它們之間有什么區別?

? 最佳回答:

當用作類型時,類的名稱表示該類的實例。要獲得類構造函數的類型,可以使用typeof

So:

class A {}
const instance: A = new A()

const aConstructor: typeof A = A
const anotherInstance: A = new aConstructor()

因此,您的decorator需要typeof A的原因是它在類構造函數上操作,而不是在實例上操作。

主站蜘蛛池模板: 亚洲一区二区三区久久久久| 91福利国产在线观看一区二区| 日韩高清一区二区三区不卡 | 中文字幕一区二区三区久久网站| 国产精品亚洲专区一区| 亚洲美女视频一区二区三区| 亚洲色大成网站www永久一区| 一级毛片完整版免费播放一区 | 国产综合无码一区二区三区| 亚洲一区二区三区国产精品无码| 成人乱码一区二区三区av| 无码日本电影一区二区网站| 亚洲熟妇av一区| 无码人妻少妇色欲AV一区二区| 久久一区二区三区99| 国产产一区二区三区久久毛片国语 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日韩精品视频一区二区三区 | 国产精品一区二区资源| 蜜桃AV抽搐高潮一区二区| 亚洲熟妇无码一区二区三区导航| 亚洲一区二区影视| 亚洲一区二区三区四区视频 | 日本一区二区三区高清| 一区二区高清视频在线观看| 日韩精品一区二区三区在线观看| 精品一区二区91| 亚洲日本一区二区一本一道| 精品人体无码一区二区三区| 中文字幕在线一区二区三区| 国产高清精品一区| 精品aⅴ一区二区三区| 国产AV午夜精品一区二区三区| 少妇精品无码一区二区三区| 日韩高清国产一区在线 | 国语对白一区二区三区| 日本v片免费一区二区三区| 动漫精品专区一区二区三区不卡| AV怡红院一区二区三区| 久久一区二区精品综合| 亚洲一区二区三区高清不卡|