美文网首页
04-TypeScirpt-类型推论和兼容性

04-TypeScirpt-类型推论和兼容性

作者: 低头看云 | 来源:发表于2020-10-01 15:51 被阅读0次

类型推论

  // 如果是先定义初始化, 那么无法自动推断类型
  let value
  value = 123
  value = '123'

  console.log('value', value)

  // 如果是定义的同时初始化, 那么ts就会自动进行类型推荐
  let value1 = 123   // numer类型
  // value1 = "112" 保存

兼容性

类型兼容性

 interface TestInterface {
    name: string
  }

  let p1 = { name: 'lnj' }
  let p2 = { age: 18 }
  let p3 = { name: 'lnj', age: 18 }

  let t: TestInterface
  t = p1
  // t = p2   // 少了接口中的name 属性
  t = p3 // 可多不可少

  interface TestInterface1 {
    name: string
    children: {
      age: number
    }
  }

  let p11 = { name: 'lnj', children: { age: 18 } }
  let p22 = { name: 'lnj', children: { age: 'abc' } }

  // 类型不兼容
  let t1: TestInterface1
  t1 = p11
  // t1 = p22 // 会递归检查

函数兼容性

  • 参数个数
  // 参数个数
  let fn1 = (x: number, y: number) => {}

  let fn2 = (x: number) => {}
  fn1 = fn2
  // fn2 = fn1 // 参数可以少, 但是不可以多
  • 参数类型

  // 参数类型
  let argTypeFn1 = (x: number) => {}

  let argTypeFn2 = (x: number) => {}

  let argTypeFn3 = (x: string) => {}

  argTypeFn1 = argTypeFn2
  // argTypeFn1 = argTypeFn3 // 参数类型不一样
  // argTypeFn3 = argTypeFn1
  • 返回值类型
  let returnFn1 = (): number => 123
  let returnFn2 = (): number => 456
  let returnFn3 = (): string => '123'

  returnFn1 = returnFn2
  // returnFn3 = returnFn1   // 返回值类型不一样
  // returnFn1 = returnFn3 // 返回值类型不一样
  • 返回值的双向协变
 // 返回值双向协变
  let fn11 = (x: boolean): number | string => (x ? 123 : 'abc')
  let fn22 = (x: boolean): number => 456
  // fn1 = fn2; // 但是可以将返回值是具体类型的赋值给联合类型的
  //   fn22 = fn11 // 不能将返回值是联合类型的赋值给具体类型的
  • 函数的重载
  // 函数的重载
  function add(x: number, y: number): number
  function add(x: string, y: string): string

  function add(x: any, y: any) {
    return x + y
  }

  function sub(x: number, y: number): number

  function sub(x: any, y: any) {
    return x - y
  }

  // 可以将重载多的赋值重载少的, 反之,则不可以
  let fnc = sub
  fnc = add

类兼容性

  • 只比较实例成员, 不比较类的构造函数和静态成员
 // 只比较实例成员, 不比较类的构造函数和静态成员
  class Person {
    public name: string
    public static age: number

    constructor(name: string, age: number) {
      this.name = name
    }
  }

  class Animal {
    public name: string
    constructor(name: string) {
      this.name = name
    }
  }

  let p: Person
  let a: Animal

  //   p = a
  //   a = p // 可以多但是不可以少
  • 类的私有属性和受保护属性会影响兼容性
// 类的私有属性和受保护属性会影响兼容性
  class Person1 {
    protected name: string
    constructor(name: string) {
      this.name = name
    }
  }

  class Animal1 {
    private name: string
    constructor(name: string) {
      this.name = name
    }
  }

  let p1: Person1
  let a1: Animal1
  //   p1 = a1  // 报错

枚举兼容性

  • 数字枚举和数值兼容性
// 数字枚举与数值兼容
  enum Gender {
    Male,
    Female,
  }

  let value: Gender
  value = Gender.Male
  value = 1
  • 数值枚举和数组枚举不兼容
// 数字枚举与数组枚举不兼容
  enum Gender1 {
    Male,
    Female,
  }

  enum Animal {
    DOg,
    Cat,
  }

  let value1: Gender
  value1 = Gender.Male
  // value1 = Animal.Cat // 报错
  • 字符串枚举和字符串不兼容
  // 字符串枚举与字符串不兼容
  enum Gender2 {
    Male = 'abc',
    Female = 'def',
  }
  let value2: Gender
  value = Gender.Male
  // value = 'abc' //Type '"abc"' is not assignable to type 'Gender'.

泛型兼容性

  • 泛型只影响使用部分, 不会影响声明部门
  interface TestInterface<T> {
    // 泛型只影响使用部分, 不会影响声明的部分
    num: T
  }

  let t1: TestInterface<number>
  let t2: TestInterface<string>

  // t1 = t2 //   Type 'string' is not assignable to type 'number'.
}

相关文章

  • 04-TypeScirpt-类型推论和兼容性

    类型推论 兼容性 类型兼容性 函数兼容性 参数个数 参数类型 返回值类型 返回值的双向协变 函数的重载 类兼容性 ...

  • 类型推论

    介绍 TS中在没有明确指定出类型的地方,类型推论会帮助提供类型推断是发生在初始化成员的时候,设置默认参数和决定函数...

  • TypeScript05--高级类型(1)

    类型推论: TypeScript里,在有些没有明确指定出类型的地方,类型推论会绑定提供类型。 高级类型: 交叉类型...

  • typescript中的类型推论和联合类型

    类型推论 如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则...

  • TypeScript基础入门 - 类型推论

    转发 TypeScript基础入门 - 类型推论 介绍 本次分享介绍TypeScript里的类型推论。即,类型是在...

  • 第八节: TypeScript 类型推断

    1. 类型推断 1.1 类型推论了解 类型推论是指 在没有明确指出类型的地方TypeScript可以根据默写规则自...

  • TypeScript——类型推论

    基础 TypeScript里,在有些没有明确指出类型的地方,类型推论会帮助提供类型。如下面的例子 let x = ...

  • Typescript

    安装 Typescript 接口 interface 约束类型结构、Duck Typing 类型推论、联合类型、类...

  • TypeScript(六) 类型别名/推论以及内置对象

    类型别名 类型推论 如果在声明变量时同时进行了初始化,则可以不用变量类型的申明。 实际上ts会根据类型推论(Typ...

  • TypeScript基础入门 - 类型兼容性 - 介绍

    转发 TypeScript基础入门 - 类型兼容性 - 介绍 介绍 TypeScript中的类型兼容性基于结构子类...

网友评论

      本文标题:04-TypeScirpt-类型推论和兼容性

      本文链接:https://www.haomeiwen.com/subject/cnduuktx.html