typeScript是什么?
- javaScript为基础构建的语言 S
- 可以在任何支持javaScript的平台中执行
- 一个javaScript的超集
- typeScript扩展了javaScript,并添加了类型
- TS不能被JS解析器直接执行,ts首先会编译成js
TypeScript增加了什么

基础类型(常用示例)
// 直接字面量类型声明
let a: 10
a = 10
// 使用 | 连接多个类型(联合类型)
let b: 'male' | 'female'
b= 'male'
b= 'female'
let c: boolean | string
c = true
c = 'string'
// any 表示任意类, 变量设置any后,相当于对该变量关闭了TS的类型检验
// 使用ts时,不建议使用any
// let d: any
// 声明变量如果不指定类型,则ts会自动判断变量的类型为any(隐式的any)
let d
d= 10
d= 'ss'
// unknown未知类型变量
let e: unknown
e = 10
e = 'ss'
let s: string
// d的类型是any,它可以赋值给任意变量
// e = d
e = "hello"
// unknown 实际上就是一个类型安全的any
// unknown类型的变量,不能直接赋值给其他变量
if(typeof e === 'string') {
s = e
}
// 类型断言
/**
* 语法
* 变量 as 类型
* <类型> 变量
*
*/
s = e as string
s = <string> e
// function fn(num): string | boolean {
// if(num >0) {
// return '123'
// } else {
// return false
// }
// }
// viod 用来表示空,以函数为例,就表示没有返回值的函数
function fn(): void {
return
}
// never 表示永远不会返回结果
function fn2(): never{
throw new Error('报错')
}
// object 表示一个js对象
let a: object
a = {}
a = function () {
}
// {} 用来指定对象中可以包含哪些属性
// 语法:{属性名:是性值,属性名:属性值}
// 在属性名后面加上 ? ,表示属性是可选的
let b: {name: string, age?: number}
b = {name:'张三', age: 45}
// [propName: string]: any 表示任意类型的属性
let c:{name:string, age: number, [propName: string]: any}
c = {name:'李四', age: 108, gender: '男', xxx: 'ooo'}
/**
* 设置函数结构的类型声明
* 语法:(形参:类型,形参:类型 ....)=> 返回值
*
*/
let d: (a: number, b:number) => number
d = function (n1:number, n2:number): number{
return n1+n2
}
/**
* 数组的类型声明
* 类型[]
* Array<类型>
*/
// stinrg[]表示字符串数组
let e: string[]
e = ['a', 'e']
// stinrg[]表示字数值数组
let f: number[]
f = [2,3]
let g: Array<string>
g = ['33','ss']
/**
* 元组, 元组就是固定长度的数组
* 语法:[类型, 类型,类型]
*/
let h: [string, number]
h = ['sss', 77]
/**
* enum 枚举
*
*/
enum Gender{
Male = 0,
Female = 1
}
let i: {name: string, gender: Gender}
i = {
name: '王五',
gender: Gender.Female
}
// & 表示同时满足
let j: { name: string} & {age: number}
j = {
name: "sss",
age: 4
}
// 类型的别名
type mysum = 1 | 2 | 3 | 4 | 5
let k: mysum
let m: mysum
k = 1
tsconfig.json常用的相关配置
{
"include": [
"./src/**/*"
],
"compilerOptions": {
"target": "es2015",
"module": "es2015",
"outDir": "./dist",
"strict": false,
"allowJs": true,
"checkJs": true,
"removeComments": true,
"noEmit": false,
"noEmitOnError": false,
"alwaysStrict": true,
"noImplicitAny": true,
"noImplicitThis": false,
"strictNullChecks": true,
}
}
webpack.config.js 常用基础配置
const path = require('path');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { CleanWenpackplugin } = require('clean-webpack-plugin');
module.exports = {
entry: "./src/index.ts",
output: {
path: path.resolve(__dirname, 'dist'),
filename: "bundle.js",
environment: {
arrowFunction: false
}
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{
loader: "babel-loader",
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "88",
"ie": "11"
},
"corejs": "3",
"useBuiltIns": "usage"
}
]
]
}
},
'ts-loader',
],
exclude: /node_modules/
} wx20141122
lcx0756
lj19877701
]
},
plugins: [
new HTMLWebpackPlugin({
template: "./src/index.html"
}),
],
resolve: {
extensions:['.ts', '.js']
}
}