字面量类型:
   
    
    使用模式: ‘ 字面量类型配合联合类型一起使用 ‘
   
使用场景: 用来’ 表示一组明确的可选值列表 ‘
写法:
    function changeDirection( direction: ‘up’ | ‘down’ | ‘ left ‘ | ‘ right ‘) {
    
    
    consloe.log( direction )
    
    }
   
解释: 参数direction 的值只能是 up/down/left/right 中的任意一个
优势: 相比于string 类型, 使用字面量类型更加精确、严谨
    any类型:
   
原则上不推荐使用any
写法:
let obj: any = { x: 0 }
obj.bar = 100
以上操作都不会有任何类型错误提示,即使存在错误
尽可能避免使用 any 类型, 非常 ‘ l临时使用any ‘ 来 ‘避免’ 书写很长、很复杂的类型
    
    其他隐式具有any类型的情况:
   
1.声明变量不提供类型也不提供默认值
2.函数参数不加类型
    注意:
   
因为不推荐使用any,所以,这两种情况下都应该提供类型
    typeof:
   
    TS也提供了typeof操作符::
   
可以在’类型上下文’ 中引用变量或属性的类型
    使用场景:
    
    根据已有变量的值,获取该值的类型,来简化类型书写
   
    let p =  { x:1, y:2 }
    
    function formatPoint ( point: { x: number;  y:number } ) { }
    
    formatPoint( p )
   
    function formatPoint ( point: typeof p ) {  }
    
   
    解释:
   
1.使用’typeof’ 操作符来获取变量p 的类型,结果与第一种( 对象字面量形式的类型 ) 相同
2. typeof 出现在 ‘类型注解的位置’ ( 参数名称的冒号后面 ) ‘所处的环境就在类型上下文’ ( 区别于JS代码 )
3.注意:typeof只能用来查询变量或属性的类型,无法查询其他形式的类型
 
