
type ClassA = class aaa{} function getClassA():typeof ClassA { return ClassA }  主要是为了统一入口动态导出类,但发现这样在另一个文件 Promise<classa>报,把值作为类使用。各位大佬怎么搞?</classa>
     1   oott123      2020-02-03 12:44:44 +08:00 via Android  Promise<typeof ClassA> 哇   |  
     2   zy445566   OP  |  
     3   maichael      2020-02-03 12:57:56 +08:00  @zy445566 #2 你这个返回的怎么会是 Promise 呢,又不是 async 包装,而且 ClassA() 和 ClassA 肯定是两个东西。   |  
     4   zy445566   OP @maichael   ```js function bbb():Promise<typeof ClassA> { return Promise.resolve(new ClassA()) } ``` 之前试过,回帖代码写快了,一样是报类型不一致  |  
     6   zy445566   OP @maichael 那又回到了最初的问题 ClassA refers to a value, but is being used as a type here. ts(2749)。  报 ClassA 不是一个类,而是一个值,我感觉是 ts 没把 ClassA 在另一个文件注册为类导致的  |  
     9   codehz      2020-02-03 13:57:33 +08:00  (那个,其实你直接写的话  返回值不用标记的。。。 然后 vscode 鼠标移动上去看自动推导的类型  |  
     11   MrJeff      2020-02-03 14:21:00 +08:00  ```  type ClassA = class aaa{} class 声明的时候自带类型 不用再 typ 直接这样就行了 class ClassA {}; ```  |  
     13   zy445566   OP @MrJeff 就是不通过 export 通过统一入口的一个方法来导出,我还尝试了  ```js getClassA():new ()=> ClassA{ return ClassA } ``` 也无法实现动态导出  |  
     15   fy136649111      2020-02-03 16:32:01 +08:00  ```  class aaa { } async function getClassA(): Promise<typeof aaa> { return aaa } (async () => { const b = new (await getClassA())(); console.log(b); })() ``` 大概这样?  |  
     17   zy445566   OP @fy136649111 我主要是为了给第二个文件做推导,实例本来就是可以生成的   |  
     18   islxyqwe      2020-02-04 08:52:37 +08:00  写个伪代码  declare function requireClassA():Promise<typeof ClassA>; async ()=>{ const c = await requireClassA(); const b:InstanceType<typeof c> =new a(); }  |  
     19   islxyqwe      2020-02-04 09:08:48 +08:00  上面写错了点东西,看得懂就好(  平时你写 classA{},这个文件里就出现了一个 classA 的构造器值和一个 classA 的类型是实例的类型, 用方法返回的肯定只能是一个值,按你的导出,导出的是这个构造器 typeof 这个值获得的当然是构造器的类型,不是实例的 实例的类型用 InstanceType 泛型获取  |  
     21   noe132      2020-02-04 09:57:44 +08:00  要分清楚类型和值  class A {} const a = new A() 其中 a 是值,代表 A 的实例 A 既是值也是类型,作为值的时候代表 A 本身,作为类型时代表 A 的实例类型 A(值)本身的类型呢? typeof A 怎么通过类的类型获取实例类型? InstanceType<T> class A {} const a: A = new A(); type AClassType = typeof A // 类的类型 const B: AClassType = A; const a2: A = new B(); const a3: InstanceType<AClassType> = new A(); type Factory = () => A; const factory: Factory = () => new A(); type Factory2 = <T extends { new(...p: any): any }>(c: T) => InstanceType<T>; const factory2: Factory2 = (C) => new C(); const a4: A = factory2(A);  |