如何在Typescript中引用工厂创建的类的实例?找不到名称错误
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';
// 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代码显示错误。奇怪。