概述
当您有一个基于 MSBuild 的项目(例如 ASP.NET Core 项目)使用 TypeScript 时,您可以通过两种方式配置 TypeScript。 您可以通过 tsconfig.json
或项目设置进行配置。
使用 tsconfig.json
我们建议您尽可能为项目使用 tsconfig.json
。 要将它添加到现有项目中,请在 Visual Studio 的现代版本中将一个名为“TypeScript JSON 配置文件”的新项添加到您的项目中。
新的 tsconfig.json
将作为 TypeScript 特定构建信息的真实来源,例如文件和配置。您可以了解 TSConfig 的工作原理,并且有一个 全面的参考。
使用项目设置
您也可以在项目的设置中定义 TypeScript 的配置。这可以通过编辑 .csproj
中的 XML 来完成,以定义描述构建如何工作的 PropertyGroups
xml
<PropertyGroup><TypeScriptNoEmitOnError>true</TypeScriptNoEmitOnError><TypeScriptNoImplicitReturns>true</TypeScriptNoImplicitReturns></PropertyGroup>
有一系列针对常见 TypeScript 设置的映射,这些设置直接映射到 TypeScript CLI 选项,用于帮助您编写更易于理解的项目文件。您可以使用 TSConfig 参考 获取有关每个映射的值和默认值的更多信息。
CLI 映射
MSBuild 配置名称 | TSC 标志 | |
---|---|---|
<TypeScriptAllowJS> |
--allowJs |
|
允许 JavaScript 文件成为程序的一部分。使用 | ||
<TypeScriptRemoveComments> |
--removeComments |
|
禁用发出注释。 | ||
<TypeScriptNoImplicitAny> |
--noImplicitAny |
|
启用对隐式 | ||
<TypeScriptGeneratesDeclarations> |
--declaration |
|
从项目中的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。 | ||
<TypeScriptModuleKind> |
--module |
|
指定生成什么模块代码。 | ||
<TypeScriptJSXEmit> |
--jsx |
|
指定生成什么 JSX 代码。 | ||
<TypeScriptOutDir> |
--outDir |
|
指定所有发出文件的输出文件夹。 | ||
<TypeScriptSourceMap> |
--sourcemap |
|
为发出的 JavaScript 文件创建源映射文件。 | ||
<TypeScriptTarget> |
--target |
|
设置发出的 JavaScript 的 JavaScript 语言版本,并包含兼容的库声明。 | ||
<TypeScriptNoResolve> |
--noResolve |
|
禁止 | ||
<TypeScriptMapRoot> |
--mapRoot |
|
指定调试器应该查找映射文件的位置,而不是生成的位置。 | ||
<TypeScriptSourceRoot> |
--sourceRoot |
|
指定调试器查找参考源代码的根路径。 | ||
<TypeScriptCharset> |
--charset |
|
不再支持。在早期版本中,手动设置读取文件的文本编码。 | ||
<TypeScriptEmitBOM> |
--emitBOM |
|
在输出文件开头发出 UTF-8 字节顺序标记 (BOM)。 | ||
<TypeScriptNoLib> |
--noLib |
|
禁用包含任何库文件,包括默认的 lib.d.ts。 | ||
<TypeScriptPreserveConstEnums> |
--preserveConstEnums |
|
禁用在生成的代码中删除 | ||
<TypeScriptSuppressImplicitAnyIndexErrors> |
--suppressImplicitAnyIndexErrors |
|
在索引缺少索引签名的对象时,抑制 | ||
<TypeScriptNoEmitHelpers> |
--noEmitHelpers |
|
禁用在编译后的输出中生成自定义辅助函数,例如 | ||
<TypeScriptInlineSourceMap> |
--inlineSourceMap |
|
在发出的 JavaScript 中包含源映射文件。 | ||
<TypeScriptInlineSources> |
--inlineSources |
|
在发出的 JavaScript 中的源映射中包含源代码。 | ||
<TypeScriptNewLine> |
--newLine |
|
设置用于发出文件的换行符。 | ||
<TypeScriptIsolatedModules> |
--isolatedModules |
|
确保每个文件都可以安全地进行转译,而无需依赖其他导入。 | ||
<TypeScriptEmitDecoratorMetadata> |
--emitDecoratorMetadata |
|
为源文件中的装饰声明发出设计类型元数据。 | ||
<TypeScriptRootDir> |
--rootDir |
|
指定源文件中的根文件夹。 | ||
<TypeScriptExperimentalDecorators> |
--experimentalDecorators |
|
启用对 TC39 阶段 2 草案装饰器的实验性支持。 | ||
<TypeScriptModuleResolution> |
--moduleResolution |
|
指定 TypeScript 如何从给定的模块说明符中查找文件。 | ||
<TypeScriptSuppressExcessPropertyErrors> |
--suppressExcessPropertyErrors |
|
在创建对象文字时,禁用报告多余属性错误。 | ||
<TypeScriptReactNamespace> |
--reactNamespace |
|
指定为 | ||
<TypeScriptSkipDefaultLibCheck> |
--skipDefaultLibCheck |
|
跳过对包含在 TypeScript 中的 .d.ts 文件的类型检查。 | ||
<TypeScriptAllowUnusedLabels> |
--allowUnusedLabels |
|
禁用对未使用的标签的错误报告。 | ||
<TypeScriptNoImplicitReturns> |
--noImplicitReturns |
|
启用对在函数中没有显式返回的代码路径的错误报告。 | ||
<TypeScriptNoFallthroughCasesInSwitch> |
--noFallthroughCasesInSwitch |
|
在 switch 语句中启用对贯穿情况的错误报告。 | ||
<TypeScriptAllowUnreachableCode> |
--allowUnreachableCode |
|
禁用对不可达代码的错误报告。 | ||
<TypeScriptForceConsistentCasingInFileNames> |
--forceConsistentCasingInFileNames |
|
确保导入中的大小写正确。 | ||
<TypeScriptAllowSyntheticDefaultImports> |
--allowSyntheticDefaultImports |
|
当模块没有默认导出时,允许使用 'import x from y'。 | ||
<TypeScriptNoImplicitUseStrict> |
--noImplicitUseStrict |
|
禁用在生成的 JavaScript 文件中添加 'use strict' 指令。 | ||
<TypeScriptLib> |
--lib |
|
指定一组捆绑的库声明文件,这些文件描述目标运行时环境。 | ||
<TypeScriptBaseUrl> |
--baseUrl |
|
指定解析裸规范模块名称的基目录。 | ||
<TypeScriptDeclarationDir> |
--declarationDir |
|
指定生成的声明文件的输出目录。 | ||
<TypeScriptNoImplicitThis> |
--noImplicitThis |
|
当 | ||
<TypeScriptSkipLibCheck> |
--skipLibCheck |
|
跳过对所有 .d.ts 文件的类型检查。 | ||
<TypeScriptStrictNullChecks> |
--strictNullChecks |
|
在进行类型检查时,考虑 | ||
<TypeScriptNoUnusedLocals> |
--noUnusedLocals |
|
当局部变量未被读取时,启用错误报告。 | ||
<TypeScriptNoUnusedParameters> |
--noUnusedParameters |
|
当函数参数未被读取时,引发错误。 | ||
<TypeScriptAlwaysStrict> |
--alwaysStrict |
|
确保始终发出 'use strict'。 | ||
<TypeScriptImportHelpers> |
--importHelpers |
|
允许从 tslib 中导入辅助函数,每个项目一次,而不是每个文件一次。 | ||
<TypeScriptJSXFactory> |
--jsxFactory |
|
指定在针对 React JSX 发射时使用的 JSX 工厂函数,例如 'React.createElement' 或 'h' | ||
<TypeScriptStripInternal> |
--stripInternal |
|
禁用发出其 JSDoc 注释中包含 | ||
<TypeScriptCheckJs> |
--checkJs |
|
启用对类型检查的 JavaScript 文件的错误报告。 | ||
<TypeScriptDownlevelIteration> |
--downlevelIteration |
|
为迭代生成更符合标准的 JavaScript 代码,但代码会更冗长,性能也会降低。 | ||
<TypeScriptStrict> |
--strict |
|
启用所有严格类型检查选项。 | ||
<TypeScriptNoStrictGenericChecks> |
--noStrictGenericChecks |
|
禁用对函数类型中泛型签名的严格检查。 | ||
<TypeScriptPreserveSymlinks> |
--preserveSymlinks |
|
禁用将符号链接解析为其真实路径。这与 node 中的相同标志相关。 | ||
<TypeScriptStrictFunctionTypes> |
--strictFunctionTypes |
|
在分配函数时,检查以确保参数和返回值是子类型兼容的。 | ||
<TypeScriptStrictPropertyInitialization> |
--strictPropertyInitialization |
|
检查在构造函数中声明但未设置的类属性。 | ||
<TypeScriptESModuleInterop> |
--esModuleInterop |
|
发出额外的 JavaScript 代码以简化对导入 CommonJS 模块的支持。这将为类型兼容性启用 | ||
<TypeScriptEmitDeclarationOnly> |
--emitDeclarationOnly |
|
仅输出 d.ts 文件,而不是 JavaScript 文件。 | ||
<TypeScriptKeyofStringsOnly> |
--keyofStringsOnly |
|
使 keyof 仅返回字符串,而不是字符串、数字或符号。旧选项。 | ||
<TypeScriptUseDefineForClassFields> |
--useDefineForClassFields |
|
发出符合 ECMAScript 标准的类字段。 | ||
<TypeScriptDeclarationMap> |
--declarationMap |
|
为 d.ts 文件创建源映射。 | ||
<TypeScriptResolveJsonModule> |
--resolveJsonModule |
|
启用导入 .json 文件 | ||
<TypeScriptStrictBindCallApply> |
--strictBindCallApply |
|
检查 | ||
<TypeScriptNoEmitOnError> |
--noEmitOnError |
|
如果报告任何类型检查错误,则禁用发出文件。 |
其他标志
由于 MSBuild 系统将参数直接传递给 TypeScript CLI,因此可以使用选项 TypeScriptAdditionalFlags
来提供上面没有映射的特定标志。
例如,这将打开 noPropertyAccessFromIndexSignature
xml
<TypeScriptAdditionalFlags> $(TypeScriptAdditionalFlags) --noPropertyAccessFromIndexSignature</TypeScriptAdditionalFlags>
调试和发布版本
您可以使用 PropertyGroup 条件定义不同的配置集。例如,一个常见的任务是在生产环境中去除注释和源映射。在这个例子中,我们定义了一个调试和发布属性组,它们具有不同的 TypeScript 配置。
xml
<PropertyGroup Condition="'$(Configuration)' == 'Debug'"><TypeScriptRemoveComments>false</TypeScriptRemoveComments><TypeScriptSourceMap>true</TypeScriptSourceMap></PropertyGroup><PropertyGroup Condition="'$(Configuration)' == 'Release'"><TypeScriptRemoveComments>true</TypeScriptRemoveComments><TypeScriptSourceMap>false</TypeScriptSourceMap></PropertyGroup><ImportProject="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets"Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />
ToolsVersion
项目文件中 <TypeScriptToolsVersion>1.7</TypeScriptToolsVersion>
属性的值标识用于构建的编译器版本(本例中为 1.7)。这允许项目在不同的机器上使用相同版本的编译器进行构建。
如果没有指定 TypeScriptToolsVersion
,则将使用机器上安装的最新编译器版本进行构建。
使用较新版本的 TS 的用户,将在首次加载时看到一个提示,要求他们升级项目。
TypeScriptCompileBlocked
如果您使用不同的构建工具来构建项目(例如 gulp、grunt 等)并使用 VS 进行开发和调试,请在项目中设置 <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
。这将为您提供所有编辑支持,但在您按下 F5 时不会进行构建。
TypeScriptEnableIncrementalMSBuild(TypeScript 4.2 Beta 及更高版本)
默认情况下,MSBuild 将尝试仅在项目源文件自上次编译后更新时运行 TypeScript 编译器。但是,如果此行为导致问题,例如当 TypeScript 的 incremental
选项启用时,请设置 <TypeScriptEnableIncrementalMSBuild>false</TypeScriptEnableIncrementalMSBuild>
以确保 TypeScript 编译器在每次运行 MSBuild 时都被调用。