zoukankan      html  css  js  c++  java
  • 【TS】-类型兼容性

    TypeScript的类型兼容性是基于采用结构类型,也就是仅看其成员结构,而不是名义类型

    原始类型和对象类型

          interface Named = {
                name: string
          }
          class Person {
                name: string
          }
          let p : Named
          p = new Person()
    

    在以上例子中,虽然p是实现了Named接口,但因为其成员name类型和Person类中的name类型相同。所以不会报错。

           interface Named = {
                name: string
          }
          let x = {name: 'ashen', age: 21}
          let y : Named
          x = y // Error
          y = x // ok
    

    在以上例子中,将y赋值给x,需要检查y中是否有x所需要的所有属性,由于缺少age,所以报错;而x赋值给y时,由于x中有y需要的name属性,且为string类型,所以不报错。

          function sayHi(n : Named){
                console.log('Hi, my name is ' + n.name)
          }
          sayHi(x) // ok
    

    函数比较

          let x = (a: number) => 0
          let y = (a: number, b: string) => 0
          x = y // Error
          y = x // ok
    

    对于函数来说,被赋值的函数的参数,应该包含赋值的函数的参数。例如js中Array的forEach方法,其原本包含三个参数:数组元素、索引、被遍历的数组。但是在使用时,可以如下只传入一个参数:

          let arr = [1, 2, 3]
          arr.forEach(item => {
                console.log(item)
          }
    )
    

    下面来看看如何处理返回值不同的函数

          let x = () => ({name: 'ashen'})
          let y = () => ({name: 'ashen', age: 21})
          x = y // ok
          y = x // Error
    

    在TypeScript中强制源函数的返回值类型必须是目标函数返回值类型的子类型

  • 相关阅读:
    NFS与通配符
    yum管理RPM包与linux网络设置
    git常用命令总结——覆盖日常开发全操作
    inner join on会过滤掉两边空值的条件
    入园第一天
    P3750 [六省联考2017]分手是祝愿 题解
    CSP2021 爆零记
    CSP 前模板记录(黄题篇)
    对拍
    2021.10.20CSP模拟模拟赛 赛后总结
  • 原文地址:https://www.cnblogs.com/ashen1999/p/14101400.html
Copyright © 2011-2022 走看看