1.Symbol類型
自ECMAScript 2015起憾赁,
symbol
成為了一種新的原始類型扰肌,就像number
和string
一樣能曾。
// symbol類型的值是通過Symbol構造函數(shù)創(chuàng)建的瘫里。
let sym1 = Symbol();
let sym2 = Symbol("key"); // 可選的字符串key
// Symbols是不可改變且唯一的轩猩。
let sym2 = Symbol("key");
let sym3 = Symbol("key");
sym2 === sym3; // false, symbols是唯一的
// 像字符串一樣卷扮,symbols也可以被用做對象屬性的鍵荡澎。
let sym = Symbol();
let obj = {
[sym]: "value"
};
console.log(obj[sym]); // "value"
// Symbols也可以與計算出的屬性名聲明相結合來聲明對象的屬性和類成員。
const getClassNameSymbol = Symbol();
class C {
[getClassNameSymbol](){
return "C";
}
}
let c = new C();
let className = c[getClassNameSymbol](); // "C"
2.Never類型
never
類型表示的是那些永不存在的值的類型晤锹。 例如摩幔,never
類型是那些總是會拋出異常或根本就不會有返回值的函數(shù)表達式或箭頭函數(shù)表達式的返回值類型鞭铆; 變量也可能是never
類型或衡,當它們被永不為真的類型保護所約束時。
never
類型是任何類型的子類型衔彻,也可以賦值給任何類型薇宠;然而偷办,沒有類型是never
的子類型或可以賦值給never類型(除了never
本身之外)艰额。 即使 any也不可以賦值給never
// 返回never的函數(shù)必須存在無法達到的終點
function error(message: string): never {
throw new Error(message);
}
// 推斷的返回值類型為never
function fail() {
return error("Something failed");
}
// 返回never的函數(shù)必須存在無法達到的終點
function infiniteLoop(): never {
while (true) {
}
}
never類型.png