Wsh's blog Wsh's blog
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)

wsh

热爱前端的程序媛
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)
  • 基础类型
  • 类型断言、类型声明
    • 枚举、函数、类、装饰器
    • 联合类型&交叉类型、泛型、类型保护、类型推断
    • 模块、命名空间
    • tsc 指令,ts配置
    • typescript
    2022-04-14
    目录

    类型断言、类型声明

    # 类型断言

    ts是强类型,在声明变量的时候,我们必须给他一个类型 具体类型: TypeScript允许你覆盖它的推断,并且能以你任何你想要的方式分析它。类型断言有两种语法,as语法和尖括号语法。

    const p: unknown = 'a,b,c';
    p.split(','); // 报错:Object is of type 'unknown'.
    

    unknown类型的p直接这样写会报错,可以使用类型断言:

    • 写法一:
    (p as string).split(',');
    
    • 写法二:
    (<string>m).split(',');
    
    
    注意:
    在使用TypeScript和JSX的时候,只有as语法可以用,在APP.tsx中尝试使用(<string>m).split(',');会报错: 
    Property 'string' does not exist on type 'JSX.IntrinsicElements'.
    JSX element 'string' has no corresponding closing tag.
    因为<string>被当成HTML元素来处理了,但是有没有找到对应的元素。 
    
    

    # 类型声明

    interface、type、declare、class都可以声明类型

    # interface/type

    interface侧重于描述数据结构,type侧重于描述类型 区别:

    • type alias 可以重命名原始类型,interface不可以:
    type Num = number;
    // interface 不行
    
    • interface可以进行声明合并, type alias不可以:
    interface Mammal {
        genus: string
    }
    
    interface Mammal {
        breed: string
    }
    
    // 前面两个interface被合并成一个同时具有genus和breed属性的类型
    const animal: Mammal = {
        genus: "1234",
        // Fails because breed has to be a string
        breed: '2'
    }
    
    type Reptile = {
        genus: string
    }
    
    // type一旦被声明,不能再加新属性
    type Reptile = {
        breed?: string
    }
    

    # extends/implements

    extends

    • extends 类似于 es6 class 对应的extends
    • 实现类的继承 class Son extends Father {}
    • 实现和接口的继承
    interface ISon extends IFather {
      sonValue: number; // ISon上除了从IFather继承的属性,还增加了sonValue
    }
    

    implements

    • 类与类之间 class Son implements Father {} // 用于类之间,此时没有继承的效果,而是要求Son上要有定义Father类的属性和方法
    • 类与接口之间: class Son implements IFather {} //用接口去规范class,要求Son上的属性和方法按照IFather接口中定义来 示例:
    interface ManLike {
      speak(): void;
      leg: number;
      hand: number;
    }
    class Human implements ManLike {
      leg: number = 2;
      hand: number = 2;
      speak() {
        console.log('i can speak');
      }
    }
    interface Chinese extends Human {
      country: string;
    }
    
    
    #typescript
    基础类型
    枚举、函数、类、装饰器

    ← 基础类型 枚举、函数、类、装饰器→

    最近更新
    01
    组件通信方式
    01-07
    02
    UIAbility
    01-07
    03
    ATKTS
    01-06
    更多文章>
    Theme by Vdoing | Copyright © 2022-2025 Wsh | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式