05-TypeScript-交叉类型-联合类型-类型保护

2020-10-03  本文已影响0人  低头看云

交叉类型

    let mergeFn = <T, U>(arg1: T, arg2: U): T & U => {
    let res = {} as T & U
    res = Object.assign(arg1, arg2)
    return res
     }

  let res = mergeFn({ name: 'cs' }, { age: 11 })
  console.log('res', res)

联合类型

  // 联合类型
  let value: string | number
  value = 'abc'
  value = 123
}

类型保护

 
  let getRandomValue = (): string | number => {
    let num = Math.random()
    return num >= 0.5 ? 'abc' : 123.3
  }
  // 无法得知res1返回值类型
  let res1 = getRandomValue()
  console.log('res1', res1)
  if ((res1 as string).length) {
    console.log((res1 as string).length)
  } else {
    console.log((res1 as number).toFixed())
  }

  function isString(value: string | number): value is string {
    return typeof value === 'string'
  }
  if (isString(res1)) {
    console.log((res1 as string).length)
  } else {
    console.log((res1 as number).toFixed())
  }

  if (typeof res1 === 'string') {
    console.log((res1 as string).length)
  } else {
    console.log((res1 as number).toFixed())
  }

  class Person {
    name: string = 'css'
  }

  class Animal {
    age: number = 12
  }

  let getRandomObject = (): Person | Animal => {
    let num = Math.random()
    return num >= 0.5 ? new Person() : new Animal()
  }

  let obj = getRandomObject()
  console.log('obj', obj)
  if (obj instanceof Person) {
    console.log(obj.name)
  } else {
    console.log(obj.age)
  }
}
上一篇下一篇

猜你喜欢

热点阅读