在 Angular 和 Typescript 更新后找不到命名空间'MyApp'



我有一个类型定义文件,我的应用程序的所有dto对象都暴露在全局范围内。

DtosGenerator.d.ts

declare module MyApp.Rest.Dto {
interface IAJsonDto {
}
}
declare module MyApp.Rest.Dto.Post {
interface ITest1PostDto extends MyApp.Rest.Dto.IAJsonDto {
code: string;
}
interface ITest2PostDto extends MyApp.Rest.Dto.IAJsonDto {
id: number;
}
interface ITest3PostDto extends MyApp.Rest.Dto.IAJsonDto {
id: number;
}
....
}

并以以下方式消费。

file1.service.ts

import ITest3PostDto = MyApp.Rest.Dto.Post.ITest3PostDto;

我的应用程序是在Angular框架上构建的,我刚刚分别完成了从Angular(8(、Typescript(3.5.3(到Angular9、Typescript(3.6.4(的迁移。在迁移之前,Dto对象的消耗没有产生任何错误,一切看起来都很正常。迁移后,当应用程序在运行的监视模式下构建时

ng build --extractCss=true --watch命令,控制台输出"找不到命名空间"MyApp"。当我添加时

/// <reference path="../../../../DtosGenerator.d.ts" /> 

在文件顶部,不再产生错误。有没有一种方法可以让我的代码保持迁移前的状态,而不添加引用路径。

有人能告诉我出了什么问题吗?

对于任何面临的人都将面临与我找到的解决方案相同的问题。经过数小时的研究,我发现Angular自动更新(https://update.angular.io/)更改了tsconfig.app.json文件配置。

迁移之前的tsconfig.app.json

{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": [ "node" ],
"typeRoots": [
"node_modules/@types"
]
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}

迁移后的tsconfig.app.json:

{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": [ "node" ],
"typeRoots": [
"node_modules/@types"         
]
},
"files": [
"main.ts",
"polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}

问题是,在迁移之前,所有文件都包含在编译过程中,而在迁移之后,只包含"files"数组中指定的2个文件和src目录中的所有类型定义文件DtosGenerator.d.ts的文件位于src文件夹的根目录中,因此需要进行一些修改才能生成最终正确的tsconfig.app.json文件。

tsconfig.app.json最终

{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",    
"typeRoots": [
"node_modules/@types"      
]
},
"files": [
"main.ts",
"polyfills.ts"
],
"include": [
"*.d.ts"
]
}

最新更新