官方描述:TypeScript 是由 Microsoft 开发的一种开放源代码语言。 它是 JavaScript 的一个超集,这意味着你可以使用已开发的 JavaScript 技能,以及以前不可用的某些功能。
TypeScript | JavaScript |
JavaScript 的超集,用于解决大型项目的代码复杂性 | 一种脚本语言,用于创建动态网页。 |
强类型,支持静态和动态类型 | 动态弱类型语言 |
可以在编译期间发现并纠正错误 | 只能在运行时发现错误 |
不允许改变变量的数据类型 | 变量可以被赋予不同类型的值 |
一、ts保留了js的全部基础类型,共八种number、string 、boolean、 null、undefind、symbol
例子:
const num: number = 0
const str: string = '0'
const flag: boolean = true
const nul: null = null
const ude: undefind
const sym: synbol = Symbol(0)
二、元组(tuple)
概念:就是规定了一个元素数量和类型的数组,每一个类型的种类可互不相同
例子:
const tuple: [number, string, boolean[]] = [0, '1', [true]]
三、枚举(enum)
例子:
enum lizi {
a=1,
b=2,
}
lizi.a即可拿到1这个枚举值
四、任意类型(any)
概念:是泛型,任何类型的值都可以赋予给被定义了any类型的变量,不建议这样使用,定义为any和js的无类型并无区别,只是套了ts的外壳
例子:
const renyi: any = 0
五、void
概念:代表没有类型,一般用于没有返回值的函数
例子:
function voidFn(): void {
console('没有返回类型')
}
function objFn(): object {
console('返回类型为对象')
return {a: 0, b: 9}
}
六、never
概念: never是任何类型的子类型,也就是说任何类型都可以赋值给never
例子:
function a(): never {
throw new Error('error');
}
一、类
例子:
class lei {
public name: string // 公共属性
protected age: number // 可以在子类中访问,不能在实例中访问
private sex: string // 私有属性,只能在类的内部访问,外部访问会报错
rendonly favor: string // 只读属性
constructor(name: string, age: number, sex: string, favor: string) {
this.name = '黎明'
this.age = 18
this.sex = '女'
this.favor = '踢足球'
}
}
二、接口
interface 定义类型
type 定义类型
异同点
1. 这两个都可以进行扩展,interface是通过继承extends来扩展的。type是通过&来扩展的
2. interface可以合并类型,比如定义两个相同的People, interface可以进行合并,type会报错,不允许修改
三、泛型
概念: 泛型可以让我们创建一个可以在多种类型上工作的组件,她能够支持当前的数据类型,同时也能支持未来的数据类型,可以大大提升组件的可重用性
例子:
1. 基本泛型
function fanxing
console.log('---------基本泛型‘)
}
2. 继承某一个类型定义的泛型
interface famxing { // 这样可以确保该泛型中必包含length属性
length: number
}
function fanxing
console.log('---------继承某一个类型定义的泛型‘)
}
概念: 是把一个相对普遍的类型,转成一个相对具体点的类型
例如:
const el =document.getElementById("jiang") as HTMLImageElement
el.src="url地址"