Skip to content

类型推论类型别名

类型推论

typescript
let str='666'//会推论出类型为string

// 以下不提前赋值给str2,会推论为any类型
let str2

str2='666'
str2=null

类型别名

typescript
// 这里s即为类型别名
type s = string | number

let str: s = '666'

type s2 = (name: string) => void

type s3 = {
    name: string
}

type s4 = number[]

// 类型别名与interface之间的区别:
// 1. 类型别名不能使用extends,但可以使用'&'来交叉类型 
type s5 = string & s4

// 2. interface没办法直接使用联合类型,需要定义属性后再为属性添加联合类型
type s6 = string | number
interface A {
    name: string | number
}

// 3.interface同名的话,会直接合并,而类型别名会报错

类型别名的高级用法

typescript
// extends 包含的意思
// 左边的值 会作为右边类型的子类型

// 此时num1为1
type num1 = 1 extends Number ? 1 : 0
// 此时num2为1
type num2 = 1 extends unknown ? 1 : 0
// 此时num3为0,never为最底层,1不属于never范围,所有此时num3为0
type num3 = 1 extends never ? 1 : 0

Released under the MIT License.