学习typescript2(any类型和unknow类型)

类型排序:

1.top type 顶级类型 any unknown

2.Object

3.Number String Boolean

4.number string boolean

5.1 false ‘sting’

6.never

Any类型

不需要类型检查,直接让他们通过编译阶段检查

let noSure:any=4
notSure="maybo a string insted"
noSure=false

声明变量的时候没有指定任意类型默认为any

let anys;
anys='123'
anys=true

只知道一部分数据的类型时,any类型也是有用的

let list:any[]=[1,true,"free"]
list[1]=100

any与object类型的区别

any允许你在编译时可选择地包含或移除类型检查

object类型的变量只是允许你给它赋任意值,但是却不能在它上面调用任意的方法

let anys:any=4
anys.ifItTxisits() //okay, ifItExists might exist at runtime
anys.toFixed()    //okay, toFixed exists

let anys:object=4
anys.toFixed();//报错 Property 'toFixed' doesn't exist on type 'Object'

弊端如果使用any就失去了TS类型检测的作用

unknown类型

typescript3.0中引入一个顶级unknown类型,但它更安全。与any一样,所有类型都可以分配给unknown,但是当没有类型断言或基于控制流的类型细化时unknown不可以赋值给其他类型,除了它自己和any外。同样地,在unknown没有断言或细化到一个确切类型之前,是不允许在其上进行任何操作的。

//unknown另外i行可以接受任何类型的赋值
let value:unknown;
value=1;  //ok
value='string';//ok
value=true;//ok
value=[];//ok
value=null;//ok
value=undefined;//ok
value=Symbol("type");//ok
value={name:"object"}//ok

//unknown类型只能赋值给unknown或any类型的变量
let value:unknown
let num:number
let str:string
let anys:any
let unk:unknown

num = value; // Error: Type 'unknown' is not assignable to type 'number'.
str = value; // Error: Type 'unknown' is not assignable to type 'string'.
obj = value; // Error: Type 'unknown' is not assignable to type 'object'.
any = value; // OK
unk = value; // OK


//unknown类型不能访问其属性,也不能访问其方法
value.toFixed(); // Error: Object is of type 'unknown'.
value.name; // Error: Object is of type 'unknown'.
//除非使用类型断言或类型守卫
(value as number).toFixed();//ok
if(typeof value==='string'){value.toUpperCase()} //ok
if(value instanceof String){console.log(value.toString())}

//unknown类型可以用来表示不确定的输入参数,或者不确定的返回值
function log(value:unknow){console.log(value)}
function getSomething():unknown{return Math.random()>0.5?1:"one"}

//unknow类型可以用于泛型中
function identity<T>(value:T):T{
	return value
}
let unknowIndetity:unknown=identity('hello')

//未知类型的类属性不需要明确赋值
class c1{
	a:string;//Error
	b:unknown;
	c:any;
}

any类型和unknown顶级类型区别

  • unknown类型比any更加严格
  • 如果是any类型在对象没有这个属性的时候还在获取是不会报错的;如果是unknown是不能调用属性和方法
如果是any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any={b:1}
obj.a

如果是unknow 是不能调用属性和方法
let obj:unknown={b:1,ccc:():number=>213}
obj.b
obj.ccc()
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的。 TypeScript 中的 `any` 类型表示一个可以是任何类型的值。它可以用于避免类型检查,或者在你还没有确定类型的情况下使用。但是,使用 `any` 类型会放弃 TypeScript 带来的类型检查的所有优势,因此在能使用更精确类型的地方应尽量避免使用 `any`。 TypeScript 中的 `unknown` 类型表示一个未知的类型。它比 `any` 类型更加严格,因为在使用前需要进行类型检查。在某些情况下,你可能希望接收一个未知的值,但是又不想使用 `any` 类型,此时就可以使用 `unknown` 类型TypeScript 中的 `never` 类型表示永远不会有返回值的函数的返回值类型。它也可以表示永远不会被执行的代码块的类型。例如,当某个函数的所有可能执行路径都会抛出异常时,它的返回值类型就可以是 `never`。 希望这对你有所帮助。 ### 回答2: TypeScript中的`any`、`unknown`和`never`是三种特殊的类型。 1. `any`类型表示任何类型的值都可以赋值给它。它相当于取消了类型检查,可以在编写代码时快速推进开发,但也容易引入潜在的类型错误。使用`any`类型时需要慎重,最好在必要情况下使用,例如在需要与非TypeScript代码进行交互或在临时情况下。 2. `unknown`类型TypeScript 3.0中引入的一种类型。与`any`相比,`unknown`类型提供了更加安全的动态类型。当我们不确定变量的类型时,可以使用`unknown`类型来保持类型的不确定性。在使用`unknown`类型的值时,我们必须首先进行类型检查或类型断言,以将其转换为更具体的类型。与`any`不同,`unknown`类型不会自动允许我们执行任意操作。这种类型的引入提高了代码的类型安全性,减少了潜在的类型错误。 3. `never`类型表示它永远不会发生的类型,即表示从不返回值的函数的返回类型以及永远无法完成的操作的结果类型。例如,在一个函数中抛出了异常,或者存在无限循环。使用`never`类型可以更好地定义某些情况下的函数或操作的返回类型,同时帮助我们避免潜在的逻辑错误。 ### 回答3: TypeScript是一种静态类型的编程语言,它可以在JavaScript的基础上添加静态类型检查和一些其他特性。在TypeScript中有三种特殊的类型:any、unknown和never。 any类型表示任意类型,它可以用来表示任何类型的值。使用any类型可以绕开类型检查,编译器不会对any类型的值进行类型检查和推断。any类型的变量可以接受任何类型的值,因此在使用any类型时需要特别小心,因为它可能导致类型错误和运行时错误。 unknown类型也表示任意类型,但它比any类型更严格。当使用unknown类型时,编译器会要求进行类型检查和类型断言,以确保类型安全。unknown类型的变量不能直接赋值给其他类型的变量,必须经过类型断言或类型检查后才能进行赋值。这种类型更适合在编写通用代码或处理动态类型的情况下使用,相比any类型unknown类型提供了更加严格的类型安全。 never类型表示永远不会发生的类型。它通常会用在函数的返回类型中,表示该函数永远不会正常返回。例如,一个会抛出异常或进入无限循环的函数的返回类型可以设为never。同时,never类型也可以用来处理不可到达的代码块,例如一个带有无限循环的函数的后续代码块。 总而言之,在TypeScript中,any类型unknown类型都表示任意类型,但unknown类型更加严格,并且要求进行类型检查和类型断言。而never类型表示永远不会发生的类型,通常用于函数的返回类型或不可到达的代码块。使用这些类型要谨慎,并且根据实际需求来选择合适的类型
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值