• 接口 索引签名 接口与类型别名的异同 接口的继承 函数接口


    接口的基本使用  (接口也是一种数据类型)

    接口是一种抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要具体的类去实现,然后第三方就可以同这组抽象方法调用,让具体的类执行具体的方法

    1. export default {}
    2. interface IFullName {
    3. firstName: string,
    4. lastName: string
    5. }
    6. let name: IFullName = {
    7. firstName: "张",
    8. lastName: "老六"
    9. }
    10. console.log(name.firstName, name.lastName);
    11. function say({ firstName, lastName }: IFullName): void {
    12. console.log(`你真是个${firstName}${lastName}`)
    13. }
    14. say(name)

     可选属性与只读属性

    可选属性使用 : ?

    只读属性使用:readonly

    readonly与const的区别:作为变量使用的话用const ,若做为属性则使用readonly

    1. export default {}
    2. // 可选属性用 ? 来进行修饰
    3. interface IFullName {
    4. firstName: string,
    5. lastName: string,
    6. age?: number
    7. }
    8. let goddassName: IFullName = {
    9. firstName: "张三",
    10. lastName: "赵四",
    11. age: 34
    12. }
    13. console.log(goddassName.firstName);
    14. console.log(goddassName.lastName);
    15. // console.log("ss");
    16. // 只读属性
    17. //顾名思义就是这个属性是不可以修改的,对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性
    18. interface IInfo {
    19. readonly name: string,
    20. readonly age: number
    21. }
    22. let info: IInfo = {
    23. name: "张三",
    24. age: 23
    25. }
    26. // console.log(info.name);
    27. // console.log(info.age);
    28. // info.name="赵四" //不可以修改
    29. // info.age=34 //不可以修改

     索引签名

    定义:索引签名用于描述那些"通过索引得到"的类型

    格式:如[props:string]:any

    应用场景:解决参数问题的物种 方法

    1. export default {}
    2. interface IFullName {
    3. firstName: string,
    4. lastName: string,
    5. age?: number,
    6. singName?: string,
    7. [props: string]: any
    8. }
    9. // 注意点:如果使用接口来限定变量或者形参,那么再给变量或者形参赋值的时候,多一个或少一个都不行   
    10. //    (实际开发中往往会出现多或者少的情况怎样解决)
    11. // 方案一 解决方案:可选属性
    12. let goddass1: IFullName = { firstName: "杨", lastName: "张三" }
    13. let goddass2: IFullName = { firstName: "李", lastName: "赵四", age: 43, singName: "赵一" }
    14. // 方案二 解决方案使用变量
    15. let info = { firstName: "杨", lastName: "张三", song: "song" }
    16. let goddass3: IFullName = info;
    17. // console.log(goddass3); //{ firstName: '杨', lastName: '张三', song: 'song' }
    18. // 第三种方案 使用类型断言
    19. let goddass4: IFullName = ({ firstName: "赵四", lasrName: "赵四", age: 12, ssss: 43 }) as IFullName;
    20. console.log(goddass4);
    21. // 第四种方案 索引签名
    22. interface IBeauty {
    23. [props: string]: string
    24. }
    25. let IBeauty = { fristName: "张", last: "三", age: "十岁" }
    26. console.log(IBeauty);
    27. interface IAge {
    28. [props: string]: number
    29. }
    30. let ages = { age: 43, num: 32, sum: 64 }
    31. // 案例
    32. interface IMyFullName {
    33. first: string,
    34. last: string,
    35. [props: string]: string
    36. }
    37. let goddass5: IMyFullName = { first: "张三", last: "张四", sex: "女" }

    函数接口

    1. export default {}
    2. interface IMyFullName {
    3. (salary: number, rewary: number): number
    4. }
    5. let sum: IMyFullName = function (x: number, y: number): number {
    6. return x + y
    7. }
    8. let he = sum(1, 4)
    9. console.log(he);

    接口的继承   

    接口继承就是说接口可以通过其他接口来扩展自己

    TS允许接口继承多个接口

    继承使用关键字extends

    单继承  多继承

    1. export default {}
    2. // 单继承
    3. interface IMyFullName {
    4. age: number
    5. }
    6. // 子 父
    7. interface firstName extends IMyFullName {
    8. name: string
    9. }
    10. let lady: firstName = {
    11. name: "张三",
    12. age: 43
    13. }
    14. console.log(lady.age);
    15. console.log(lady.name);
    16. // 多继承
    17. interface Name {
    18. m1: number
    19. }
    20. interface Age {
    21. m2: number
    22. }
    23. interface ziyuan extends Name, Age {
    24. m3: string
    25. }
    26. let lady2: ziyuan = {
    27. m1: 34,
    28. m2: 34,
    29. m3: "ss"
    30. }
    31. console.log(lady2.m1);
    32. console.log(lady2.m2);
    33. console.log(lady2.m3);

     接口与类型别名的异同    

    // 相同点:1.都可以描述属性或方法

    //               2.都允许拓展

    // 不同点:1.type 可以声明基本类型别名,联合类型,[元组]

    // ​               2.当出现使用type和interface声明同名变量 type会直接报错    interface会进行组合

    都可以描述属性和方法

    1. // 都可以描述属性 和方法
    2. type WomanStar = {
    3. name: string,
    4. age: number,
    5. show(): void
    6. }
    7. interface IWomanStar {
    8. name: string,
    9. age: number,
    10. show(): void
    11. }
    12. // 类型别名
    13. let star1: WomanStar = {
    14. name: "张三",
    15. age: 34,
    16. show() {
    17. console.log("show1");
    18. }
    19. }
    20. let star2: IWomanStar = {
    21. name: "张四",
    22. age: 23,
    23. show() {
    24. console.log("show2");
    25. }
    26. }
    27. console.log(star1);
    28. console.log(star2);

    都可以扩展 

    1. // 都可以扩展
    2. type Fnn1 = {
    3. name: string
    4. }
    5. type Fnn2 = Fnn1 & {
    6. name2: number
    7. }
    8. let sum: Fnn2 = {
    9. name: "张三",
    10. name2: 34
    11. }
    12. console.log(sum.name, sum.name2);
    13. // 别名
    14. interface Qnn1 {
    15. age: string
    16. }
    17. interface Qnn2 extends Qnn1 {
    18. age1: number
    19. }
    20. // 接口
    21. let star: Qnn2 = {
    22. age: "张武",
    23. age1: 23
    24. }
    25. console.log(star);

     不同点:

    1. // 1.type可以声明基本数据类型,联合类型,数组等
    2. type a = number;
    3. type b = string;
    4. type c = string[];
    5. type d = [number | string]
    6. // interface只能声明变量
    7. // interface s = string //报错
    8. // 2.当出现使用type和interface声明同名变量时
    9. // type会直接报错
    10. // type Name = {
    11. // name: string
    12. // }
    13. // type Name = {
    14. // name: string
    15. // } //报错
    16. // interface会进行组合
    17. interface Age {
    18. age: number
    19. }
    20. interface Age {
    21. age: number,
    22. name: string
    23. }
    24. let Sum: Age = {
    25. age: 34,
    26. name: "赵四"
    27. }
    28. console.log(Sum.age);
  • 相关阅读:
    Docker Compose安装
    SpringBoot项目与Nacos配置
    QCC Tx 发射器(source)通话(麦克风输入)切换
    reghdfe:多维面板固定效应估计
    TS 类型体操还能这么玩,太秀了
    react实战系列 —— 起步(mockjs、第一个模块、docusaurus)
    数字与字符串的相互转换——洛谷刷题收获(2023.10.2)
    qt线程介绍
    Spring Boot中监视器指什么呢?
    技术分享 | App常见bug解析
  • 原文地址:https://blog.csdn.net/red_HTML/article/details/126728147