1、Type不是类型,仅是别名而已
- 类型别名:给一个类型起一个别名,如: sting、number
- 使用场景:当同一类型被使用多次的时候,可以通过类型别名,简化该类型的使用
- 类型:原始值、元组、泛型、联合类型、交叉类型
type Name = string
type NameResolver = () => string
type NameOrResolver = Name | NameResolver
function getName (n: NameOrResolver): Name{
if (typeof n === "string"){
return n
}
else {
return n()
}
}
2、Interface定义接口
interface Card {
suit: string;
card: number;
}
interface Person {
name:string,
readonly id:number,
age?:number,
[propName:string]:any,
createCar?(name:string, age:number):void,
createCarRow?(this:Person):()=>Card
}
let per:Person = {
id: 82374823,
name: "张三",
age: 18,
like: "乒乓",
car: "兰博基尼"
}
3、type vs interface
相同点
- 都可以定义一个对象或函数
- 都允许继承:extends、type
type addType = (num1:number,num2:number) => number
interface addType { (num1:number,num2:number):number }
const add:addType = (num1, num2) => {
return num1 + num2
}
interface Person {
name: string
}
interface Student extends Person {
grade: number
}
type Person = {
name: string
}
type Student = Person & { grade: number }
type Person = {
name: string
}
interface Student extends Person {
grade: number
}
interface Person {
name: string
}
type Student = Person & { grade: number }
不同点
type Name = string
type arrItem = number | string
const arr: arrItem[] = [1,'2', 3]
type Person = {
name: Name
}
type Student = Person & { grade: number }
type Teacher = Person & { major: string }
type StudentAndTeacherList = [Student, Teacher]
const list:StudentAndTeacherList = [
{ name: 'lin', grade: 100 },
{ name: 'liu', major: 'Chinese' }
]
interface Person {
name: string
}
interface Person {
age: number
}
const person: Person = {
name: 'lin',
age: 18
}
type Person = {
name: string
}
type Person = {
age: number
}
const person: Person = {
name: 'lin',
age: 18
}