淘先锋技术网

首页 1 2 3 4 5 6 7

目录

1.any类

2.unknown类型

any和unknown区别:

3.void类型

4.never类型

5.tuple类型


1.any类

在某些情况下,我们确实无法确定一个变量的类型,并且可能它会发生一些变化,这个时候我们可以使用any类型(类似 于Dart语言中的dynamic类型)。

any类型有点像一种讨巧的TypeScript手段:

1.我们可以对any类型的变量进行任何的操作,包括获取不存在的属性、方法;

2.我们给一个any类型的变量赋值任何的值,比如数字、字符串的值;

如果对于某些情况的处理过于繁琐不希望添加规定的类型注解,或者在引入一些第三方库时,缺失了类型注解,这个时候 我们可以使用any:

包括在Vue源码中,也会使用到any来进行某些类型的适配;

2.unknown类型

unknown是TypeScript中比较特殊的一种类型,它用于描述类型不确定的变量。

感觉可以使用unknown类型的地方也可以使用any类型,但是还是有区别的 

any和unknown区别:

1.unknown类型只能赋值给any和unknown类型,any类型太灵活,不安全

2.any类型可以赋值给任意类型

3.void类型

void通常用来指定一个函数是没有返回值的,那么它的返回值就是void类型:

我们可以将null和undefined赋值给void类型,也就是函数可以返回null或者undefined

function sum(num:number,num2:number){
    console.log(num + num2)
}

这个函数我们没有写任何类型,那么它默认返回值的类型就是void的,我们也可以显示的来指定返回值是void:

function sum(num:number,num1:number): void {
    console.log(num + num1)
}

4.never类型

never 表示永远不会发生值的类型,比如一个函数:

如果一个函数中是一个死循环或者抛出一个异常,那么这个函数会返回东西吗?

不会,那么写void类型或者其他类型作为返回值类型都不合适,我们就可以使用never类型;

function loopFun(){
    while(true){
        console.log('loopFun')
    }
}

function loopErr(){
    throw new Error()
}
function handleMessage(message: string | number){
    swith( typeof message){
        case 'string':
            console.log('str')    
            break
        case 'number':
            console.log('num')
            break
        default:
            const check:never = message
    }

}

5.tuple类型

tuple是元组类型,很多语言中也有这种数据类型,比如Python、Swift等。

const list:[string,number,number] = ['num',1,2]
const item1 = list[0] //'num', 并且知道类型是字符串类型
const item2 = list[1] // 1 ,并且知道类型是数字类型

那么tuple和数组有什么区别呢?

首先,数组中通常建议存放相同类型的元素,不同类型的元素是不推荐放在数组中。(可以放在对象或者元组中)

其次,元组中每个元素都有自己特性的类型,根据索引值获取到的值可以确定对应的类型;

const info:(string | number)[] = ['num',1,2]
const item1 = info[0] //不能确定类型

const info1:[ string ,number ,number] = ['num',1,2]
const item1 = info[0] //一定是string类型