4 函数接口
为了使用接口表示函数类型,我们需要给接口定义一个调用签名。
它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。
export default {}
//定义函数接口
interface IMakeMoney {
(salary: number, reward: number): number
}
let sum: IMakeMoney = function (x: number, y: number): number {
return x + y;
}
let res = sum(100, 1000);
console.log(res);
5 接口的继承
接口继承就是说接口可以通过其他接口来扩展自己。
Typescript允许接口继承多个接口。
继承使用关键字extends。
export default {}
/*
接口继承就是说接口可以通过其他接口来扩展自己。
Typescript允许接口继承多个接口。
继承使用关键字extends。
*/
//单继承
interface IPerson {
age: number
}
interface IName extends IPerson {
name: string
}
let person: IName = {
name: "王思聪", age: 18
}
//多继承
interface IFatherMoney {
m1: number
}
interface IMontherMoney {
m2: number
}
interface ISonMoney extends IFatherMoney, IMontherMoney {
s1: number
}
let sonMoney: ISonMoney = {
m1: 1000,
m2: 10000,
s1: 1
}
console.log(`儿子共有${sonMoney.m1 + sonMoney.m2 + sonMoney.s1}`)
6 接口与类型别名的异同
1.相同点:
都可以描述属性或方法
都允许拓展
2.不同点:
type可以声明基本数据类型,联合类型,数组等; interface只能声明变量
·当出现使用type和interface声明同名的数据时;type会直接报错;interface会进行组合
type不会自动合并; interface会
export default {}
//相同点:
// 1.都可以描述属性或方法
type womanStar = {
name: string
age: number
show(): void
}
interface IwomanStar {
name: string
age: number
show(): void
}
let star1: womanStar = {
name: "刘亦菲",
age: 18,
show() {
console.log("仙剑奇侠传一")
}
}
let star2: IwomanStar = {
name: "杨幂",
age: 18,
show() {
console.log("古剑奇谭")
}
}
console.log(star1.name,star1.age);
star1.show()
console.log(star2.name,star2.age);
star2.show()
//2.都允许拓展
type money = {
y1: number
}
type money2 = money & {
y2: number
}
let salary: money2 = {
y1: 10,
y2: 20
}
interface IStar1 {
name: string
}
interface IStar2 extends IStar1 {
age: number
}
let star: IStar2 = {
name: "范冰冰",
age: 18
}
//不同点:
// 1.type可以声明基本数据类型,联合类型,数组等
//interface只能声明变量
type t1 = number;
type t2 = number | string;
type t3 = [number | boolean]
// interface ITest=number
// 2.当出现使用type和interface声明同名的数据时
//type会直接报错
// type myName = {
// name: string
// }
// type myName = {
// name: string
// }
interface IMayName {
name: string
}
interface IMayName {
name: string,
age: number
}
let myName: IMayName = {
name: "库里",
age: 30
}