any: 定义可以为任何类型,减少复杂类型,快速开发,不会保障类型安全
unknown:定义为未知类型,类型推论,保障类型安全
Any任意类型
Unknown未知类型
不保证类型,但能保证类型安全
使用Any适合快速成型,快速上线,但有一定的安全隐患
使用Unknown更加保险,保证类型安全
any和unkonwn优缺点:
1、any能保证代码的快速成型,快速上线,但不能保证类型安全(遗留下一些安全隐患);
2、unkonwn能保证类型安全;
// unknown
let randomValue: unknown = 666;
randomValue = true;
randomValue = '232ds';
randomValue = {};
if(typeof randomValue === 'function'){
randomValue()
}
if(typeof randomValue === 'string'){
randomValue.toUpperCase()
}
any是任何类型都有可以,不需要校验
unknown是未知类型,使用是需要做一定的判断才可以
any 任意类型
灵活性 避免没有必要的类型定义
多用 且用好这个类型
unknow 未知类型
不保证类型 但使用时限定类型,保证使用安全
// any 和 unkonwn
let randomValue: any = 666;
randomValue = true;
randomValue = "asdga";
randomValue = {};
randomValue(); // 报错
randomValue.toUpperCase(); // 报错
let randomValue: unknown= 666;
randomValue = true;
randomValue = "asdga";
randomValue = {};
if(typeof randomValue === 'function') {
randomValue();
}
if(typeof randomValue === 'string') {
randomValue.toUpperCase(); // 报错
}
any 任意类型 unkonwn 未知类型
random
Any主要可以快速开发,无需定义复杂类型
Unknown 则是保证定义类型的安全性,比如
let g:unkown=1
g()此时就会报错
any vs unknown
any: 不保证安全,
unknown: 保证类型安全
1、any 支持并且兼容所有类型()
let randomVal: any = 666;
randomVal = true;
randomVal = 'sdfsa';
randomVal = {};
randomVal();
randomVal.toUpperCase();
这段代码编写没有报错,但编译后就报错了!
2、unkonwn 不保证类型,但能保证类型安全
在使用 unkonwn变量的时候,需要做一定程度的判断或者类型转换,当确定变量类型以后才能正常使用。
let randomVal: unkonwn = 666;
randomVal = true;
randomVal = 'sdfsa';
randomVal = {};
if (typeof randomVal === 'function') {
randomVal();
}
if (typeof randomVal === 'string') {
randomVal.toUpperCase();
}
区别:
使用any适合代码的快速成型快速上线,但是会遗留一些明显的安全隐患。
使用unkonwn比any保险一点,可以保证类型的安全。
动态类型:any
(重点问题:日常使用JavaScript的时候其实就是在使用一个any类型,那么,typescript目的是给JavaScript带来强类型定义,为什么还要引用这种any类型动态支持各种类型呢?)
使用any主要的目的是为了加速我们的开发过程,避免太冗长或者没有必要或者约定俗成的类型定义。
有人说使用typescript就不要使用any,使用any就失去了类型的意义了。
在代码中使用any,目的是为了快速开发、提升效率,避免过度设计。
可以想一下,为什么JavaScript可以流行这么多年还经久不衰,这正是因为JavaScript的灵活性!
而typescript所带来的any则在极大程度上保留了JavaScript的它的灵活性,喜欢JavaScript是因它无与伦比的灵活性,但是痛恨的同样也是它的灵活性。
JavaScript这种野蛮生长猥琐发育的灵活性可以让团队快速开发,但是给也会给团队带来不可阅读性、不可维护性、不可拓展性等一系列的问题,而typescript则正是因为有any类型,才能在继承JavaScript以后最大程度的保持语言灵活性的同时,还能带来强类型语言才能形成的高可维护性。
typescript中的any绝非无意义,它是通过多方论证得出的结果,所有要多用,并且用好any类型,使用any类型时一定要小心,合理使用它!