"files": [
"core.ts",
"sys.ts",
"types.ts",
"scanner.ts",
"parser.ts",
"utilities.ts",
"binder.ts",
"checker.ts",
"tsc.ts"
]
列表中的文件都会被TS编译器所编译
include - 设置需要进⾏编译的⽂件,⽀持路径模式匹配;
exclude - 设置⽆需进⾏编译的⽂件,⽀持路径模式匹配;
compilerOptions - 设置与编译流程相关的选项。
使用
"files"
属性
"compilerOptions"
: {
"module": "commonjs"
,
"noImplicitAny":
true
,
"removeComments":
true
,
"preserveConstEnums":
true
,
"sourceMap":
true
"files"
: [
"core.ts"
,
"sys.ts"
,
"types.ts"
,
"scanner.ts"
,
"parser.ts"
,
"utilities.ts"
,
"binder.ts"
,
"checker.ts"
,
"emitter.ts"
,
"program.ts"
,
"commandLineParser.ts"
,
"tsc.ts"
,
"diagnosticInformationMap.generated.ts"
使用
"include"
和
"exclude"
属性
"compilerOptions"
: {
"module": "system"
,
"noImplicitAny":
true
,
"removeComments":
true
,
"preserveConstEnums":
true
,
"outFile": "../../built/local/tsc.js"
,
"sourceMap":
true
"include"
: [
"src/**/*"
"exclude"
: [
"node_modules"
,
"**/*.spec.ts"
1.3、compilerOptions 选项
compilerOptions ⽀持很多选项,常⻅的有
baseUrl
、
target
、
moduleResolution
和
lib
等。
compilerOptions 每个选项的详细说明如下:
"compilerOptions"
: {
/*
基本选项
*/
"target": "es5",
//
指定 ECMAScript ⽬标版本: 'ES3'(default), 'ES5', 'ES6'/'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'
"module": "commonjs",
//
指定使⽤模块: 'commonjs', 'amd','system', 'umd' or 'es2015'
"lib": [],
//
指定要包含在编译中的库⽂件
"allowJs":
true
,
//
允许编译 javascript ⽂件
"checkJs":
true
,
//
报告 javascript ⽂件中的错误
"jsx": "preserve",
//
指定 jsx 代码的⽣成: 'preserve',
'react-native', or 'react'
"declaration":
true
,
//
⽣成相应的 '.d.ts' ⽂件
"sourceMap":
true
,
//
⽣成相应的 '.map' ⽂件
"outFile": "./",
//
将输出⽂件合并为⼀个⽂件
"outDir": "./",
//
指定输出⽬录
"rootDir": "./",
//
⽤来控制输出⽬录结构 --outDir.
"removeComments":
true
,
//
删除编译后的所有的注释
"noEmit":
true
,
//
不⽣成输出⽂件
"importHelpers":
true
,
//
从 tslib 导⼊辅助⼯具函数
"isolatedModules":
true
,
//
将每个⽂件做为单独的模块 (与'ts.transpileModule' 类似).
/*
严格的类型检查选项
*/
"strict":
true
,
//
启⽤所有严格类型检查选项
"noImplicitAny":
true
,
//
在表达式和声明上有隐含的 any类型时报错
"strictNullChecks":
true
,
//
启⽤严格的 null 检查
"noImplicitThis":
true
,
//
当 this 表达式值为 any 类型的时候,⽣成⼀个错误
"alwaysStrict":
true
,
//
以严格模式检查每个模块,并在每个⽂件⾥加
⼊ 'use strict'
/*
额外的检查
*/
"noUnusedLocals":
true
,
//
有未使⽤的变量时,抛出错误
"noUnusedParameters":
true
,
//
有未使⽤的参数时,抛出错误
"noImplicitReturns":
true
,
//
并不是所有函数⾥的代码都有返回值时,抛出错误
"noFallthroughCasesInSwitch":
true
,
//
报告 switch 语句的 fallthrough 错误。(即,不允许 switch 的 case 语句贯穿)
/*
模块解析选项
*/
"moduleResolution": "node",
//
选择模块解析策略: 'node' (Node.js)
or 'classic' (TypeScript pre-1.6
)
"baseUrl": "./",
//
⽤于解析⾮相对模块名称的基⽬录
"paths": {},
//
模块名到基于 baseUrl 的路径映射的列表
"rootDirs": [],
//
根⽂件夹列表,其组合内容表示项⽬运⾏时的结构内容
"typeRoots": [],
//
包含类型声明的⽂件列表
"types": [],
//
需要包含的类型声明⽂件名列表
"allowSyntheticDefaultImports":
true
,
//
允许从没有设置默认导出的模块中默认导⼊。
/*
Source Map Options
*/
"sourceRoot": "./",
//
指定调试器应该找到 TypeScript ⽂件⽽不是源⽂件的位置
"mapRoot": "./",
//
指定调试器应该找到映射⽂件⽽不是⽣成⽂件的位置
"inlineSourceMap":
true
,
//
⽣成单个 soucemaps ⽂件,⽽不是将sourcemaps ⽣成不同的⽂件
"inlineSources":
true
,
//
将代码与 sourcemaps ⽣成到⼀个⽂件中,要求同时设置了 --inlineSourceMap 或 --sourceMap 属性
/*
其他选项
*/
"experimentalDecorators":
true
,
//
启⽤装饰器
"emitDecoratorMetadata":
true
//
为装饰器提供元数据的⽀持
二、声明文件
2.1、为什么需要声明文件
初始化项目
$ mkdir test-declare
$ cd test-declare
$ npm init -y
$ yarn add typescript -D
$ npx tsc --init
创建 src/sum/index.js 文件,内容如下: 这是一个最普通不过的 js 文件,对外暴露 sum () 方法,在 nodejs 中运行。
function sum(a, b) {
return a + b
module.exports = sum
创建 src/index.ts 文件,内容如下: (这是一个 ts 文件,在 ts 文件中导入 js 文件)
import sum from './sum'
console.log(sum(2, 2))
这时,如果使用 Vscode 编辑代码,应该可以看到如下的报错:意思就是没找到 sum 文件的声明文件。
为什么会报这个错误?
typescript 编译器看到的每个变量、方法都必须明确知道它的类型,在 src/index.ts 文件中导入 src/sum/index.js 文件,js 文件中的方法是没有类型的,造成 typescript 不能识别的错误。
解决方法也很简单,编辑 tsconfig.json 文件:
"allowJs": true,
"outDir": "./dist",
"rootDir": "./src",
其中 allowJs 配置告诉 typescript 编辑器将 js 文件中的所有变量和方法都设置 any 类型,这样 typescript 编译器就能识别 js 文件了。
添加配置后报错消失,鼠标移动到 sum () 方法可以看到方法参数确确实实都设置为 any 类型了。
此时目录结构应该如下:
|