"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./buildFile",
"diagnostics": true,
"target": "ES5",
"module": "CommonJS",
"outFile": "./app.js",
"lib": ["DOM", "ES2015", "ScriptHost", "ES2019.Array"],
"allowJS": true,
"checkJs": true,
"outDir": "./dist",
"rootDir": "./",
"declaration": true,
"declarationDir": "./file",
"emitDeclarationOnly": true,
"sourceMap": true,
"inlineSourceMap": true,
"declarationMap": true,
"typeRoots": [],
"types": [],
"removeComments":true,
"noEmit": true,
"noEmitOnError": true,
"noEmitHelpers": true,
"importHelpers": true,
"downlevelIteration": true,
"strict": true,
"alwaysStrict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"esModuleInterop": true,
"allowUmdGlobalAccess": true,
"moduleResolution": "node",
"baseUrl": "./",
"paths": {
"jquery": ["node_modules/jquery/dist/jquery.min.js"]
},
"rootDirs": ["src","out"],
"listEmittedFiles": true,
"listFiles": true
}
"include": [
"src/**/*"
],
"exclude": [
"demo.ts"
],
"files": [
"demo.ts"
]
在两个ts文件中命名同一个名字变量会报错,提示在其他xx文件已经有相同命名了
namespace A {
export const a:number = 1
}
namespace A {
export namespace B {
export const a:number = 1
}
}
console.log(A.B.a)
当使用第三方库时,需要引入它的声明文件,才能获得对应代码补全和接口提示
declare var 声明全局变量
declare function 声明全局方法
声明文件 .d结尾的 有声明文件的库会自动补全代码和提示
没有代码的库,社区会编写,安装社区编写的声明文件 npm i --save-dev @types/express
或者添加一个包含 `declare module 'express';` 的新声明(.d.ts)文件
比如给express库编写声明文件 起一个名字为express.d.ts的文件
文件内容 declare module 'express' 此时index.ts文件中引入express就不会报错了
声明扩充
import express from 'express'
const app = express()
const router = express.Router()
app.use('/api', router)
router.get('/api', (req: any, res:any) => {
res.json({
code: 200,
message: 'ok'
})
})
app.listen(9001, () => {
console.log('9001监听')
})
declare module 'express' {
interface Router {
get(path:string,cb?:(req:any, res:any)=>void):void
}
interface App {
use(path:string,router:any):void
listen(port:number, cb?:() => void)
}
interface Express {
():App
Router():Router
}
const express:Express
export default express
}