TypeScript将使用 never 类型来表示不应该存在的状态
返回never的函数必须存在无法达到的终点
functionerror(message:string):never {//因为必定抛出异常,所以 error 将不会有返回值
thrownewError(message)
}
functionloop():never{
while(true){
//因为这个是死循环,永远不会去返回的
}
}
interfaceA{
type:"保安"
}
interfaceB{
type:"草莓"
}
interfaceC{
type:"卷心菜"
}
typeAll=A|B
functiontype(val:All){
while(val.type){
case"保安":break
case"草莓":break
//case "卷心菜":break
default://兜底机制,此时C没有用上就会报错提示。这就算never的作用
constcheck:never=val
break
}
}
Symbol类型
symbol
是一种新的原生类型,就像number
和string
一样symbol
类型的值是通过
Symbol构造函数创建的可以传递参做为唯一标识 只支持 string 和 number 类型的参数
lets:symbol=Symbol('小满')
letnum:symbol=Symbol('小满')
letobj= {
[num] ="value"//Symbol
[s] ="草莓"//Symbol
name:"小满"
sex:"男"
}
console.log(obj.[num])//取到value
console.log(s,num)//返回Symbol(小满)Symbol(小满)
console.log(s===num)//false
//这个值看似一样,其实因为内存地址指针位置不同,所以是唯一值
for(letkeyinboj){
console.log(key)
}//只会打印出name跟sex,[num]与[s]将打印不出来
console.log(Object.keys(obj))//["name","sex"]
console.log(Object.getOwnPropertyNames(obj))//["name","sex"],跟上面一样,打印不出来
console.log(JSON.stringify(obj));//["name":"小满","sex":"男"],一样打印不出来
能够读取到Symbol的两种方式
静态方法
Reflect.ownKeys()
返回一个由目标对象自身的属性键组成的数组(Array)。语法:Reflect.ownKeys(target) =>
target
获取自身属性键的目标对象。
Reflect.ownKeys
方法返回一个由目标对象自身的属性键组成的数组。它的返回值等同于Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))
。
console.log(Object.getOwnPropertySymbol(obj));//能打印出来两个Symbol,另外两个普通的不会打印出来
Reflect.ownKeys()//此属性是将所有的属性都列出来
console.log(Reflect.ownKeys())//四个全部圆满的打印出来