第一章:Typescript概述
1.TS介绍
1.Typescript是以JavaScript为基础构建的语言,Typescript扩展了JavaScript并添加了类型,可以在任何支持JavaScript的平台中执行,TS不能被js解析器直接执行,因此要把ts转换为js代码来执行
2.ts增加了类型,面向对象的
ts开发环境搭建:下载node.js 安装node.js 进入命令行 输入 npm i-g typescript 创建一个ts文件 使用tsc对ts进行编译
2.基本类型:类型声明
let a:number;//这个声明了一个变量a,同时指定他的类型为number
//因为a的类型设置为了number 在以后的使用过程a的值只能是数字
a=10;
// a='hello';//这个就是报错,因为类型不匹配
console.log(a);
let b:String;
b='计算机科学与技术';
console.log(b);
//如果变量的声明和赋值是同时进行的,ts可以自动对变量进行类型检测
function sum(x :number,y:number) {
return x+y;
}
function sum1(x :number,y:number):number {//声明了函数返回值类型
return x+y;
}
console.log(sum(1, 23));
//使用字面量来进行类型声明
let a:10;
a=10;
//也可以使用 | 或来连接多个字符、
let b: boolean|string;//这个语句读作b的类型可以是布尔值也可以是字符串
b=true;
b='计算机科学与技术';
//any 任何类型,任意赋值,一个类型设置为any后相当于对变量关闭了ts的类型检测 不建议使用
let d:any;
//也就是d变量可以随意赋任意类型的值
d=true;
d='计算机科学与技术';
d=2;
//声明变量如果不指定类型,则ts解析器会自动判断变量的类型为any
//unknown 表示未知类型的值 这个就是一个类型安全的any
let e:unknown;
e=10;
e='计算机科学与技术';
e=true;
//类型断言 可以用来告诉解析器变量的实际类型
let s;
s=e as string;
//void
function fn() :void{//返回值为空值
return null;
}
//never表示永远不会返回结果
// @ts-ignore
function fn2() :never{
}
2.环境搭建
1. 下载node
2. 安装node
- - npx tsc - v查看版本号 检测安装是否成功
4. 创建一个ts文件
5. 使用tsc 对文件进行编译
终端在当前文件打开输入:- - - - node 文件名
3.TS中的类型声明
let a;
a= 10 ;
console . log ( a)
let b: string ;
b= "计算机科学与技术学院"
console . log ( b) ;
let c: boolean = false ;
console . log ( c) ;
function fn ( a, b) {
return a+ b;
}
console . log ( fn ( 12 , 34 ) ) ;
function sum ( a: number , b: number ) {
return a+ b;
}
console . log ( sum ( 123 , 223 ) ) ;
function f ( a: number , b: number ) : number {
return a+ b;
}
console . log ( f ( 123 , 456 ) ) ;
3.TS的类型声明-1
let a: string
let b: 10 ;
b= 10 ;
let c: "male" | "female" ;
c= "male"
c= "female"
let d: boolean | string
let y: any
y= '哈哈哈'
let e: unknown ;
e= 10
d= e as string
d= < string > e
function fn1 ( ) : void {
}
function fu2 ( ) : never {
throw new Error ( "报错了??" )
}
4.TS的类型声明-2
let a: object;
a= { } ;
a = function fn ( ) {
console . log ( "对象" )
}
let b: { name: string } ;
b= { name: '吴邪' }
console . log ( b) ;
let c: { name: string , age? : number , [ proName: string ] : any }
let d : ( a: number , b: number ) => number
d = function g ( n1, n2) {
return n1+ n2
}
console . log ( d ( 12 , 67 ) )
let e: string [ ]
e= [ 'a' , 'b' , 'c' ]
let f: number [ ] ;
let g: Array < number > ;
let h: [ string , string ] ;
h= [ 'hello' , '计算机'
]
console . log ( h) ;
let i: { name: string , gender: string } ;
i= {
name: '孙悟空' ,
gender: '男'
}
console . log ( i. name)
enum Gender{
Male,
Femle,
}
let j: { name: string , gender: Gender} ;
j= {
name: '吴邪' ,
gender: Gender. Femle
}
console . log ( j. gender=== Gender. Femle)
let k: { name: string } & { number : number } ;
type myType = string
let o: 1 | 2 | 3 | 4 | 5
let l: 1 | 2 | 3 | 4 | 5
let m: myType
5.TS编译选项-1
console . log ( "hello" )
let a= 10
var c= "计算机科学"
console . log ( c) ;
let obj: {
name: '吴邪' ,
age: 19
}
console . log ( obj. age)
{
"include" : [
"./src/**/*"
] ,
"exclude" : [
"./src/hello/**/*"
] ,
"extends" : ""
}
6.TS编译选项-2
{
"include" : [
"./src/**/*"
] ,
"compilerOptions" : {
"target" : "ES2020" ,
"module" : "ES2020" ,
"lib" : [ "dom" ] ,
"outDir" : "" ,
"outFile" : "" ,
"allowJs" : false ,
"checkJs" : false ,
"removeComments" : false ,
"noEmit" : false ,
"noEmitOnError" : false ,
}
}
7.TS编译选项-3
{
"include" : [
"./src/**/*"
] ,
"compilerOptions" : {
"target" : "ES2020" ,
"module" : "ES2020" ,
"lib" : [ "dom" ] ,
"outDir" : "" ,
"outFile" : "" ,
"allowJs" : false ,
"checkJs" : false ,
"removeComments" : false ,
"noEmit" : false ,
"noEmitOnError" : false ,
"alwaysStrict" : false ,
"noImplicitAny" : false ,
"noImplicitThis" : false ,
"strictNullChecks" : false ,
"strict" : false ,
}
}
8.使用Webpack打包代码
1. 终端输入:npm init - y
在输入:npm i - D 安装开发依赖
在输入:npm i - D webpack webpack- cli typescript ts- loader 安装好依赖之后
const path= require ( 'path' )
module. exports= {
entry: "./src/index.ts" ,
output: {
path: path. resolve ( __dirname, 'dist' ) ,
filename: "bundle.js"
} ,
module: {
rules: [
{
test: / \.ts$ / ,
use: 'ts-loader' ,
exclude: / node-modules /
}
]
}
}
{
"name" : "pro-3" ,
"version" : "1.0.0" ,
"description" : "" ,
"main" : "index.js" ,
"scripts" : {
"test" : "echo \"Error: no test specified\" && exit 1" ,
"build" : "webpack"
} ,
"keywords" : [ ] ,
"author" : "" ,
"license" : "ISC" ,
"devDependencies" : {
"ts-loader" : "^9.4.2" ,
"typescript" : "^4.9.4" ,
"webpack" : "^5.75.0" ,
"webpack-cli" : "^5.0.1"
}
}
{
"compilerOptions" : {
"module" : "commonjs" ,
"target" : "es5" ,
"sourceMap" : true
} ,
"exclude" : [
"node_modules"
]
}
终端输入npm run build运行
9.Webpack打包代码-2
安装Webpack插件:
终端输入:npm i - D html- webpack- plugin
const path= require ( 'path' )
const HTMLWebpackPlugin= require ( 'html-webpack-plugin' )
module. exports= {
entry: "./src/index.ts" ,
output: {
path: path. resolve ( __dirname, 'dist' ) ,
filename: "bundle.js"
} ,
module: {
rules: [
{
test: / \.ts$ / ,
use: 'ts-loader' ,
exclude: / node-modules /
}
] ,
} ,
plugin: [
new HTMLWebpackPlugin ( ) ,
]
}
插件: npm i - D clean- webpack- plugin 可以做到实时更新最新文件
10.Webpack打包代码-3
终端输入:
npm i -D @babel/core @babel/preset-env babel-loader core-js