TS笔记-接口 -泛型
接口
(function () {
// 描述一个对象的类型
type myType = {
name: string,
age: number
};
/*
* 接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法
* 同时接口也可以当成类型声明去使用
*/
interface myInterface {
name: string;
age: number;
}
interface myInterface {
gender: string;
}
// const obj: myInterface = {
// name: 'sss',
// age: 111,
// gender: '男'
// };
/*
* 接口可以在定义类的时候去限制类的结构,
* 接口中的所有的属性都不能有实际的值
* 接口只定义对象的结构,而不考虑实际值
* 在接口中所有的方法都是抽象方法
*/
interface myInter {
name: string;
sayHello(): void;
}
/*
* 定义类时,可以使类去实现一个接口,
* 实现接口就是使类满足接口的要求
*/
class MyClass implements myInter {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello() {
console.log('大家好~~');
}
}
})();
泛型
/*
function fn(a: any): any{
return a;
}
*/
/*
\* 在定义函数或是类时,如果遇到类型不明确就可以使用泛型
*/
function fn<T>(a: T): T {
return a;
}
/* I.可以直接调用具有泛型的函数 */
// 1.不指定泛型,TS可以自动对类型进行推断
let result = fn(10);
// 2.指定泛型
let result2 = fn<string>('hello');
/* II.泛型可以同时指定多个 */
function fn2<T, K>(a: T, b: K): T {
console.log(b);
return a;
}
fn2<number, string>(123, 'hello');
/* III.限制泛型范围 */
interface Inter {
length: number;
}
// T extends Inter 表示泛型T必须时Inter实现类(子类)
function fn3<T extends Inter>(a: T): number {
return a.length;
}
fn3({length: 10});
/* Ⅳ.类中使用泛型 */
class MyClass<T> {
name: T;
constructor(name: T) {
this.name = name;
}
}
const mc = new MyClass<string>('孙悟空');
本文笔记来自-尚硅谷2021版TypeScript教程(李立超老师TS新课)