• 【TS】类和接口


    super

    如果子类覆盖父类中的定义的方法,在子类中可以使用super调用父类中的同名方法。super有两种调用方法:

    • 方法调用:

    如:super.onCreate();

    • 构造方法调用:
    • 如:constructor() { super(); }

    接口

    接口是一种命名类型的方式,这样就不用在行内定义了。

    类经常当作接口使用:

    1. class App extends BMMultiWindowPage {
    2. aWindow: Window;
    3. cWindow: Window;
    4. aRouter: StackRouter;
    5. cRouter: StackRouter;
    6. }

    类型别名和接口的异同

    类型别名和接口是同一概念的两种句法(类似于函数表达式和函数声明之间的关系)。

    • 两个声明都定义结构,且可以相互赋值:
    1. import { type } from "os";
    2. type Car = {
    3. wheel: string;
    4. price: number;
    5. color: string;
    6. }
    7. let car1: Car = {
    8. wheel : "baoma",
    9. price : 30,
    10. color : "red"
    11. }
    12. interface NewCar {
    13. wheel: string;
    14. price: number;
    15. }
    16. let newCar2 :NewCar = car1;
    17. console.log(newCar2);
    18. //print:{ wheel: 'baoma', price: 30, color: 'red' }

    可以看到,当我们把Car类型的car1赋值给NewCar类型的newcar2时,自动扩展出了属性color。

    但是我们在接口中添加Car类型中没有的属性则会报错:

    以上操作反之亦然。

    • 可扩展性:

    对于type

    1. type Car = {
    2. wheel: string;
    3. price: number;
    4. }
    5. type NewCar = Car & {
    6. color: string;
    7. }

    这里需要注意 用 & 相当与在Car中添加了color: string;而使用 | 则相当于在Car中添加了color?: string;

    对于接口:

    1. interface Car {
    2. wheel: string;
    3. price: number;
    4. }
    5. interface NewCar extends Car {
    6. color: string;
    7. wheel: string;
    8. }

    这里就相当于type的&,所有的属性都必须要有。

    不同之处:

    1. 类型别名更加通用,右边可以时任何类型,而接口只能是结构
    2. 同一作用域中的同名接口会自动合并,而类型别名则会报错
    3. 扩展接口是TS将检查扩展的接口是否可赋值给被扩展的接口,而类型别名则会尽可能地把被扩展的类型和扩展的类型组合在一起,最终结果是重载签名,而不会报错

    声明合并

    同一作用域中的同名接口会自动合并:

    1. interface Car {
    2. wheel: string;
    3. price: number;
    4. }
    5. interface Car {
    6. color: string;
    7. wheel: string;
    8. }
    9. let NewCar2: Car = {
    10. wheel: "baoma",
    11. color: "red",
    12. price: 10
    13. }
    14. console.log(NewCar2);
    15. //print:{ wheel: 'baoma', color: 'string;', price: 10 }

    使用泛型:

    使用泛型就不可以了,即便是同名。

  • 相关阅读:
    Java 基础复习 Day 24
    systemverilog/uvm的 blog https://www.amiq.com/consulting/blog/
    一文看懂GPT风口,都有哪些创业机会?
    【网工】华为设备命令学习(防火墙)
    Qt Creator 编译 libxlsxwriter
    Paddle炼丹炉炸了Unexpected BUS error encountered in DataLoader worker
    elasticsearch7 实战应用
    Linux vim
    如何利用langchian调用百度大模型API
    MLP算法及其实现
  • 原文地址:https://blog.csdn.net/niuguobao/article/details/126214909