联合类型
// 这样是联合类型,既可以是数字类型也可以是字符串类型
let number: string | number = '1234'
// 这样写会报错
let bool: string | number = true
函数使用联合类型
const fn = (val:number | boolean):boolean => {
return !!val
}
交叉类型
// 多种类型的集合,联合对象将具有所联合类型的所有成员
interface People {
age: number,
height: number
}
interface Person{
sex: string
}
const fn= (man: People & Person) => {
console.log(man.age)
console.log(man.height)
console.log(man.sex)
}
fn({age: 18,height: 180,sex: 'man'});
类型断言
语法: 值 as 类型 或 <类型>值
需要注意的是,类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误:
// 这样写是有警告的应为B的接口上面是没有定义run这个属性的
interface A {
run: string
}
interface B {
build: string
}
const fn = (type: A | B): string => {
return type.run
}
// 可以使用类型断言来推断他传入的是A接口的值
interface A {
run: string
}
interface B {
build: string
}
const fn = (type: A | B): string => {
return (type as A).run
}
Class类
TS 是如何定义类的
// 这样写会报错
class Person{
constructor(name,age){
this.name = name
}
}
// TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明
class Person{
name: string
age: number
constructor(name,age){
this.name = name
}
}
// 这样也会有问题,因为age属性没用上
// 如果了定义了变量不用 也会报错 通常是给个默认值 或者 进行赋值
class Person{
name: string
age: number = 18
constructor(name,age){
this.name = name
}
}
// 完整写法
class Person{
name: string
age: number
constructor(name,age){
this.name = name
this.age = age
}
run() {
}
}