由于没有编译和类型检查的束缚,JavaScirpt
天生就是一门灵活,容易上手的语言,但也难以维护
TypeScript
可以说已经悄悄地走近了程序员(更准确一点是前端程序员)的日常开发之中。
在大型项目中,TS的低成本学习+高回报的代码质量提升是我们希望看到的!
这篇文章主要是介绍TS大概是什么?旨在扫盲,也希望各位大佬能批评指正
然后,说起TS不要再只知道上单TS了,它还是JS的加强盔甲
TypeScript
是JavaScript
的超集,它是包含JS的,或者说TS是javascript
的一件装备console.log([] == []) // false
console.log([] <= []) // true
console.log([] >= []) // true
乱七八糟
console.log(Math.min()); // Infinity
console.log(Math.max()); // -Infinity
console.log(Math.min() < Math.max()); // false
一塌糊涂
console.log([1, 2, 3, 11, 22].sort()); // [1,11,2,22,3]
厚礼蟹
TypeScript
可以解决上面的问题TypeScript
让Javascript
拥有了Type
的约束,从根本上杜绝了一些代码错误的产生TypeScirpt
是不可以直接在浏览器运行的
Deno
(node反过来)npm install tsc -g
npm install ts-node -g
ts-node test.ts
运行typescirpt
文件Code Runner
点击右上角的小三角运行
js
文件再运行webpack
来完成的tsconfig.json
文件
watch
自动编译removeComments
自动取出注释,减少代码体积target
编译的目标版本{
"compilerOptions": {
"watch": true,
"removeComments": true,
"target": "ES5"
}
}
// js
function multiply(a, b) {
return a * b
}
console.log(multiply(1, 2)) // 2
console.log(multiply("1", 2)) // 2
// ts
function multiply(a: number, b: number) {
return a * b
}
console.log(multiply(1, 2)) // 2
console.log(multiply("1", 2)) // 报错
?
),还有函数的返回类型
void
function multiply(a: number, b?: number): number {
return a * b
}
console.log(multiply(1, 2)) // 2
console.log(multiply(1)) // NaN
let point: [number, number, number?]
point = [1, 2, 3]
point = [1, 2]
console.log(point);
let color: number | string
color = "red"
color = 0xff0000
// color = true // 报错
let gender: "male" | "female"
let dice: 1 | 2 | 3 | 4 | 5 | 6
gender = "male"
// gender="boy" // 报错
dice = 3
// dice=123 // 报错
interface User {
name: string;
id: number;
}
const user: User = {
name: '41',
id: 1,
// age: 123 // 多写会报错
}
function getUserName(callback: (data: string) => void) {
}
getUserName((data) => {
alert(data)
})
getUserName((data) => {
// alert(data * 2) // 类型报错
})
type
关键字给复杂的类型取一个别名type UserID = number | string
function getUserInfo(userId: UserID) {
}
tsconfig.js
noImplicitAny
noImplicitAny
参数true
让编译器有更严格的验证any
的,现在需要手动添加any
function multiply(a: any, b: any) {
return a * b
}
strictNullChecks
strictNullChecks
参数true
不能够赋值为null
或者undefined
null
,undefined
类型let s: string
// s = null // 报错
// s = undefined // 报错
let a: string | null | undefined
a = null
TypeScript
编写的,所以可能无法使用
@types/...