【发布时间】:2021-02-28 12:18:54
【问题描述】:
我们有一个文件包含tsc 或vscode 无法识别的接口。
src/sap-truck-roster/resolver/RosterResolver.ts:40:17 - 错误 TS2304:找不到名称“上下文”。
// src\shared\types\Context.d.ts
import { Roster } from '@sap-truck-roster/entity/Roster'
import { Account } from '@it-portal/entity/Account'
interface Context {
user: Account
dataSources: {
sapRosterApi: Roster
}
}
显然我们需要在tsconfig 中使用选项typeRoots,正如建议的here。但由于某种原因,接口Context 仍然无法识别。我们在这里缺少什么?
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@environment": ["src/environment"],
"@utils/*": ["src/utils/*"]
},
"typeRoots": ["./node_modules/@types", "./src/shared/types/**/*.d.ts"],
"rootDir": "./src",
"outDir": "./dist",
"target": "es6",
},
"exclude": ["node_modules"],
"include": ["./src/**/*.tsx", "./src/**/*.ts", "./src/**/*.d.ts"]
}
使用界面:
import { Resolver, Arg, Query, Ctx, Field, ObjectType, createUnionType } from 'type-graphql'
import { Roster } from '@sap-truck-roster/entity/Roster'
import { plainToClass } from 'class-transformer'
@Resolver()
export class RosterResolver {
@Query(() => RosterQueryResultUnion)
async roster(
@Ctx() ctx: Context, // use Context without import
@Arg('date', () => String) date: string
): Promise<typeof RosterQueryResultUnion> {
const response = await ctx.dataSources.sapRosterApi.getRoster(date)
if (response.returnCode === 'OK') {
return plainToClass(RosterArray, {
data: response.data,
})
}
return plainToClass(ApiError, {
code: response.returnCode,
message: response.errorMessage,
})
}
}
【问题讨论】:
-
为什么不导出?
-
当使用
export和import时它工作正常。但是使用.d.ts文件的目的是不再需要这个,接口在全局范围内。 -
你能具体说明你想如何访问这个界面吗?
-
没问题,更新了 OP
标签: typescript tsconfig