切换主题
一、TypeScript是什么?
1、以JavaScript为基础构建的语言
2、一个JavaScript的超集
3、可以在任何支持JavaScript的平台中执行
4、TypeScript扩展了JavaScript并添加了类型
注意:
二、TypeScript增加了什么?
1、类型
2、支持ES的新特性
3、添加ES不具备的新特性
4、丰富的配置选项
5、强大的开发工具
注意:
三、TypeScript开发环境搭建
1、下载nodejs
https://www.123pan.com/s/QvTuVv-Ej5w.html
2、按照nodejs
3、使用npm全局按照typescript
npm i -g typescript
4、创建ts文件
5、使用tsc对ts文件进行编译
tsc xxx.ts
四、数据类型
1、number
typescript
let a;
a=123; //对
a="hdq"; //错
2、string
typescript
let a;
a="hdq"; //对
a=123; //错
typescript
let a=false; //默认为boolean类型了
a=true; //对
a=123; //错
为函数返回值和形参指定类型
typescript
function(a:number,b:number):number{
return a+b;
}
为一个值设置多个可选类型
typescript
let c:boolean | string;
c=ture;
c="123"
3、boolean
typescript
let a:boolean;
a=true;
4、字面量
typescript
let a:"female" | "man";
let b:10;
5、any
any表示的是任意类型,一个变量设置类型为any后相当于该变量关闭了TS的类型检测
声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式的any)
6、unknown
unknown表示未知类型的值。
unknown实际上就是一个类型安全的any
unknown类型的变量不能直接赋值给其他变量
除非
方法一:
typescript
let a:unknown="huangdaquan";
let b:string;
if(typeof a === "string"){
b=a;
}
方法二: as类型断言
1、格式一:
typescript
let a:unknown="huangdaquan";
let b:string;
b=a as string;
2、格式二:
typescript
let a:unknown="huangdaquan";
let b:string;
b=<string>a;
7、void
如果一个函数没写返回值,那么自动返回值为any类型
typescript
function fn():void{
return undefined/null/; //三种都可以写,最好啥也不写
}
从哲学上讲,void没有返回值,在某种意义上讲,没有返回值也算是一种返回值
8、never
never表示永远不会返回结果
typescript
function fn():never{
throw new Error('报错了')
}
9、object
object表示一个js对象,一般使用ts开发中不使用,使用{}
typescript
let a:object; //合法,不推荐
let b:{}; //推荐
语法:{属性名:属性值,属性名:属性值}
1、在属性名后边加上?
,表示属性是可选的
typescript
let a:{name:string,age?:number};
a={name:"hdq"}; //合法
a={name:"hdq",age:20}; //合法
2、添加额外的属性
typescript
let a:{name:string,[propName:string]:any};
a={name:"hdq",age:20,gender:"男"};
3、声明箭头函数,添加额外参数
typescript
let a=(a:number,b:number)=>number{}
10、Array
typescript
let a:string[];
let a:Array<string>
let b:number[];
let b:Array<number>
11、tuple(元组)
元组就是固定长度的数组,多一个少一个元素都不行
typescript
let a:[number,string]; //a是一个元组,长度为2,第一个元素必须是number,第二个元素必须是string
a=[123,"hdq"];
12、enum(枚举)
多个值之间选择的适合使用enum枚举
typescript
enum Gender{
Male=0,
Female=1
}
let a:{name:string,gender:Gender};
a={
name:"孙悟空",
gender:Gender.Male
}
13、|
typescript
let a:number | string; //a可以是number类型,也可以是string类型
14、&
typescript
let a:{name:string} & {age:number};
a={name:"hdq",age:20} //a中name属性和age属性必须同时满足,name属性为string类型,age为number类型
15、类型的别名
typescript
type myType=1 | 2 | 3 | 4 | 5;
let a:myType; //相当于let a:1 | 2 | 3 | 4 | 5;
五、tsconfig.json
一、实时编译
1、单个ts文件发生变化,实时编译为js文件
tsc app.ts -w
2、如果想实时编译全部ts文件,需要配置项目
(1)新建tsconfig.json
文件(可写注释)
{
}
(2)使用tsc
- typescript
tsc //编译全部ts文件
- typescript
tsc -w //实时编译全部ts文件
二、tsconfig.json文件
1、include
指定编译包含哪些ts文件
json
{
"include":[
"./src/**/*" //**表示任意目录,*表示任意文件
]
}
2、exclude
指定编译时不包含哪些ts文件
json
{
"exclude":[
"./src/hello/**/*" //编译时排除hello文件
]
}
3、extends
定义被继承的配置文件
typescript
"extends":"./config/base"
4、files
指定被编译文件的列表,只有需要编译的文件少时才会用到
json
"files":[
"index1.ts",
"index2.ts",
"index3.ts"
]
列表中的文件都会被TS编辑器编辑
5、compilerOptions
1、target
用来指定ts指定编译后的es版本
json
"compilerOptions":{
"target":"es6"
}
2、module
指定要使用的模块化的规范
json
"compilerOptions":{
"module":"es6"
}
3、lib
用来指定项目中要使用的库
json
"compilerOptions":{
"lib":["dom,..."]//一般不要求你改
}
4、outDir
用来指定编译后的js文件所在的目录
json
"compilerOptions":{
"outDir":"./dist"
}
5、outFile
将代码合并为一个文件
设置outFile后,所有的全局作用域中的代码会合并到同一个文件里去
6、allowJs
是否对js文件进行编译,默认值为false
json
"compilerOptions":{
"allowJs":false
}
7、checkJs
是否检测js代码是否符合语法规范,默认是false
json
"compilerOptions":{
"checkJs":flase
}
8、removeComments
ts编译为js文件后是否移除注释
json
"compilerOptions":{
"removeComments":true
}
9、noEmit
不生成编译后的文件
json
"compilerOptions":{
"noEmit":true
}
10、noEmitOnError
ts文件有错误时,就不生成编译后的js文件
json
"compilerOptions":{
"noEmitOnError":true
}
11、alwaysStrict
用来设置编译后的文件是否使用严格模式,默认false
json
"compilerOptions":{
"alwaysStrict":true
}
12、noImplicitAny
不允许隐式的any类型
json
"compilerOptions":{
"noImplicitAny":true
}
13、noImplicitThis
不允许不明确类型的this
json
"compilerOptions":{
"noImplicitThis":true
}
14、strictNullChecks
是否严格的检查空值
json
"compilerOptions":{
"strictNullChecks":true
}
15、strict
所有严格检查的总开关,一开,所有关于严格检查的都打开,反之相反
json
"compilerOptions":{
"strict":true
}
六、webpack
一、安装依赖
npm i -D webpack webpack-cli typescript ts-loader
二、编写webpack.config.js配置文件
js
const path=require("path")
module.exports={
//指定入口文件
entry:"./src/index.ts",
output:{
//指定打包文件的目录
path:path.resolve(__dirname,'dist'),
//打包后文件的名字
filename:"bundle.js"
},
//指定webpack打包时要使用的模块
module:{
//指定要加载的规则
rules:[
{
//test指定的时规则生效的文件
test:/\.ts$/,
//要使用的loader
use:'ts-loader',
//要排除的文件
exclude:"/node-modules/"
}
]
}
}
三、webpack自动生成html文件
npm i -D html-webpack-plugin
webpack.config.js文件
js
//引入html插件
const HTMLWebpackPlugin=require("html-webpack-plugin")
module.exports={
plugins:[
new HTMLWebpackPlugin({
title:"html文件自定义title", //自定义title
//也可也指定一个html文件作为生成html网页的模板
template:"./src/index.html"
})
]
}
四、实时更新项目至浏览器
npm i -D webpack-dev-server
在package.json中
json
"scripts":{
"start":"webpack serve --open chrome.exe"
//"start":"webpack serve --open --mode development" 弹幕修正
//"start":"webpack serve --open"
}
五、清空dist目录,再重新生成js文件,防止有旧的文件存在
npm i -D clean-webpack-plugin
在webpack.config.js
js
const {CleanWebpackPlugin}=require('clean-webpack-plugin')
module.exports={
plugins:[
new CleanWebpackPlugin()
]
}
六、设置引用模块
在webpack.config.js
module.exports={
resolve:{
extensions:['.ts','.js']
}
}
七、打包后的文件不想用箭头函数,想兼容老版本浏览器
js
const path=require("path")
module.exports={
output:{
//告诉webpack不使用箭头函数
environment:{
arrowFunction:false,
const:fasle //不适用变量const
}
}
}
八、打包
在package.json
json
"scripts":{
"build":"webpack"
}
执行命令打包
npm run build
七、babel
一、安装依赖
npm i -D @babel/core @babel/preset-env babel-loader core-js
二、配置
在webpack.config.js
js
module.exports={
module:{
rules:[
{
...
use:[//从后往前执行加载器
//可"babel-loader",
//或
{
//指定加载器
loader:"babel-loader",
//设置babel
options:{
//设置预定义的环境
presets:[
[
//指定环境的插件
"@babel/preset-env",
//配置信息
{
targets:{
//浏览器版本
"chrome":"88",
//"ie":"11"
},
//指定corejs的版本
"corejs":"3",
//使用corejs的方式 "usage"表示按需加载
"useBuiltIns":"usage"
}
]
]
}
},
"ts-loader"
]
}
]
}
}
八、css
npm i -D less less-loader css-loader style-loader
在webpack.config.js
module.exports={
module:{
rules:[
{
//test指定的时规则生效的文件
test:/\.less$/,
//要使用的loader
use:[
"style-loader",
"css-loader",
"less-loader"
]
}
]
}
}
九、postcss
npm i -D postcss postcss-loader postcss-preset-env
module.exports={
module:{
rules:[
{
//test指定的时规则生效的文件
test:/\.less$/,
//要使用的loader
use:[
"style-loader",
"css-loader",
{
loader:"postcss-loader",
options:{
postcssOptions:{
plugins:[
"postcss-preset-env",
{
browser:"last 2 versions"
}
]
}
}
},
"less-loader"
]
}
]
}
}