如何在Typescript中引用工厂创建的类的实例?找不到名称错误

如何在Typescript中引用工厂创建的类的实例?找不到名称错误,typescript,Typescript,Typescript未能引用工厂创建的类。 下面是一个示例代码: // factory.ts export const createClass = () => class Model { // ... } // ModelA.ts import {createClass} from './factory'; export const ModelA = createClass(); let a: ModelA; // Cannot find name 'ModelA';

Typescript未能引用工厂创建的类。 下面是一个示例代码:

// factory.ts
export const createClass = () =>
  class Model {
    // ...
  }

// ModelA.ts
import {createClass} from './factory';

export const ModelA = createClass();

let a: ModelA; // Cannot find name 'ModelA';

// other.ts
import {ModelA} from './ModelA';
new ModelA() // Cannot find name 'ModelA';

我做错了什么?

ModelA.ts中尝试这个

export const ModelA = createClass();
export type ModelA = typeof ModelA;
编辑(Joon的学分),供未来读者阅读

上述解决方案显然不起作用,因为您无法

const foo: ModelA = new ModelA()
  //Type 'Model' is not assignable to type 'typeof Model'. Property 'prototype' is missing in type 'Model'.
在评论工作中提出了一项建议

export type ModelA = typeof ModelA['prototype'];

(但不确定原因)。

如果您试图获取该函数生成的类的保险类型,则可以使用
InstanceType
条件类型

export const createClass = () =>
class Model {
    // ...
}


export const ModelA = createClass();
type ModelA = InstanceType<typeof ModelA>
let a: ModelA = new ModelA(); // ok
export const createClass=()=>
类模型{
// ...
}
export const ModelA=createClass();
类型ModelA=实例类型
设a:ModelA=newmodela();//好啊

试试
让a:typeof ModelA
;实际上,这不起作用,因为typeof ModelA引用类本身的类型。我认为它应该是ModelA['prototype']
typeofModelA['prototype']
奇怪,它在TypeScript2.9.2上对我有效。你用什么版本?我看到有一种自我参照,但它可以很容易地通过命名来解决。这里甚至推荐导出类型和变量(模命名)的整体解决方案:我看到现在ts节点接受该代码,但VS代码显示错误。奇怪。