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

时间:2018-07-21 08:12:52

标签: 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';

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

我在这里做什么错了?

2 个答案:

答案 0 :(得分:2)

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'];

(虽然不确定为什么)。

答案 1 :(得分:2)

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

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


export const ModelA = createClass();
type ModelA = InstanceType<typeof ModelA>
let a: ModelA = new ModelA(); // ok