我有10多个搜索请求,其中包含可能被抽象的公共请求字段。例如,两个字段在它们之间是相同的,所有字段都类似于以下内容:
进行常见搜索
{
name: 'purple',
guid: '1672d0cf-08dc-4c04-9ce2-a2e6e85d1d13',
searchType: 'common'
}
有关访问的详细信息
{
name: 'purple',
guid: '1672d0cf-08dc-4c04-9ce2-a2e6e85d1d13',
visitId: 35
}
在 APISearch.ts
之类的内容中执行以下操作会很不错 import { search } from './APIModels.ts'
export class commonSearch extends search {
public searchType?: string;
}
export class visitRequestSearch extends search {
public visitId: number;
}
APIModals.ts
export class search {
public name?: string;
public guid?: string;
}
当我尝试包含基本搜索时,我收到以下错误
[at-loader] Checking finished with 1 errors
[at-loader] src\app\ApiModels.ts:12:44
TS2507: Type 'any' is not a constructor function type.
我的小提琴手似乎认为抽象是合理的:https://jsfiddle.net/michael_shomsky/0bppt8dg/2/
那么为什么我会收到错误。我开始再次查看一些文档(https://www.typescriptlang.org/docs/handbook/advanced-types.html),看起来我应该使用某种交集,但我希望有一个可用的搜索请求库,而不是工厂;所以可能还有另一种模式,或者我搞砸了。
答案 0 :(得分:2)
在以各种方式搞错之后,我意识到文件的导入方式存在错误。显然TS2507: Type 'any' is not a constructor function type.
是对缺少的超级班级的回应(好吧,至少在我的情况下)。:
以下导入删除了“.ts”并开始按预期工作(类似于JSFiddle)
import { search } from './APIModels.ts';
需要
import { search } from './APIModels';
答案 1 :(得分:1)
对于您的用例,您似乎应该使用Typescript接口。类似的东西:
interface BaseRequest {
name: string,
guid: string
}
interface CommonSearch extends BaseRequest {
searchType: string
}
interface VisitDetail extends BaseRequest {
visitId: number
}