gpt4 book ai didi

typescript - Typescript 中的 MetaClasses 是不可能的吗

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:47 36 4
gpt4 key购买 nike

例如,以下不会编译 (link to typescript playground example) :

declare class ClassFactory {
constructor();
new(): any;
}

const User = new ClassFactory();
const user = new User();

产生的错误:

Cannot use 'new' with an expression whose type lacks a call or construct signature.

我需要额外的注释吗?我怎样才能声明一个元类?我假设 new(): any; 被视为类的原型(prototype)方法,因此是实例构造模式。

编辑:固定链接

最佳答案

它们是可能的。这是一个简单的例子:

declare class User{}
declare interface ClassFactory {
new(): typeof User;
}
declare var ClassFactory: ClassFactory;

const UserClass = new ClassFactory();
const user = new UserClass(); // user has type `User`

各个部分的解释

  • 要声明“用 new 调用时这个东西会返回一些东西”,您不能使用 class。因此 interface ClassFactory
  • 要在变量 命名空间中使用这样的声明,您需要一个变量。因此 var ClassFactory
  • 要说某物是而不是类的实例,您不能做 : User 您需要获取类的类型类(class)。因此 typeof User

更多

此处多次使用的一个关键概念是声明空间。此处涵盖:https://basarat.gitbooks.io/typescript/content/docs/project/declarationspaces.html 🌹

关于typescript - Typescript 中的 MetaClasses 是不可能的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760853/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com