const 用于修饰变量,readonly 用于变量的属性
const x: boolean;
const x: {
readonly a: boolean;
} = {
a: true;
};
对于数组,const 只能保证地址不改动,ReadonlyArray
则可以直接禁用 push/pop
function f1() {
while (true) {}
}
function f2() {
throw new Error('error');
}
f1
和f2
都是永远返回不了的,称它们的返回值类型为是 never
let vAny: any = 10; // ok
let vUnknown: unknown = 10; // ok
let s1: string = vAny; // ok
let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion)
常量枚举经过编译器编译就是一个数字(0),单纯的 enum 会保留对象(Color.Red),所以常量枚举性能更好
btw,默认 enum 转 number 是 0,1,2…
但是如果指定其中的一个值,后面的会跟着列出来
enum Colors {
Red,
Blue = 5,
Yellow,
}
console.log(Colors.Red); // 0
console.log(Colors.Blue); // 5
console.log(Colors.Yellow); // 6
enum 支持反向映射
console.log(Colors.Red); // 0
console.log(Colors[0]); // Red
type Pet = Dog | Cat
type PetList = [Dog, Pet]
interface A {
a: string;
}
interface A {
b: number;
}
// A 为 {
// a: string;
// b: number;
// }