TS学习笔记2
接口:在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
-- 其实就是对函数,对象,以及类的结构和类型进行约束
来看
interface Type {
name: string,
age: number
}
// 这里我定义了一个名叫 Type 的接口, 里面写了这个接口的需要有name, age 两个属性
// 并且约束了他们的数据类型
let obj: Type
// 这里我声明了一个变量 让它需要遵守 Type 数据规范
// (感觉就是自定义了一个对象的数据类型)
obj = { name: 'Mike', age: 18 } // true
obj = { name: 11 , age: 18 } // Error: 不能将类型“number”分配给类型“string”
obj = { name: 'Mike', age: 18, isMan: false } // Error: 不能将类型“{ name:string; age: number; isMan: boolean; }”分配给类型“Type”。对象文字可以只指定已知属性,并且“isMan”不在类型“Type”中
obj = { age: 18 } // Error: 类型 "{ age: number; }" 中缺少属性 "name",但类型 "Type" 中需要该属性。
// 以上也说明了我们使用 Type 当作变量的类型后,我们需要满足的它的约束
// 否则ts会认定语法错误
但是这样用也太难了,这必须事先明确好所有的属性和属性的类型,如果事先确定不了,那就完犊子了
TS也知道很难明确,所以就有了 【可选属性】和【额外属性】
来看
interface Person {
name: string,
age: number,
sex?: string
[propName: string]: any
}
/**
* 我们定义了一个 Person 接口, 我们知道name,age属性是绝对有的
* 但是sex属性不确定有没有,那么就可以在sex后加个 "?" 表示不确定也就是可以有也可以没有
* 而我们也不确定是否还有其他的属性,所以可以在后面加一个[propName: string]: any
* 表示属性名是string类型,而属性的类型不确定就是 any
*/
// 就这样我们只要满足name和age有且类型正确就可以随便浪了
// 注意⚠️: 当有sex时,sex 类型必须是string
let p1 = { name: 'lucy', age: 10, sex: 'male', isMarried: false } // true
这里只讲一下普通对象的接口,关于类和函数的接口在后面具体再讲