TypeScript笔记-基础类型

154 阅读3分钟

系列文章

typeScript基础类型及使用

布尔值 boolean

let isDone: boolean = true;

数字 number

const num: number = 2;

字符串

const name: string = 'abc';

数组

// 设置子元素为固定类型的数组
// 第一种
const list: number[] = [1, 2, 3];
// 第二种
const list: Array<number> = [1, 2, 3];

元组 Tubple

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。(可通过元组定义一对值分别为string和number类型的元组,如下示例)

let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error

枚举 enum

// 自动赋值
enum Color {Red, Green, Blue} // 默认从0开始给元素编号,即Red = 0, Green = 1, Blue = 2...
let c: Color = Color.Green; // c = 1;
// 手动赋值
enum Color {Red = 2, Green = 4, Blue = 6}
// 可反向获取枚举名称
enum Color {Red = 2, Green = 4, Blue = 6}
const colorName = Color[4]; // colorName = 'Green'

数字枚举可以被混入到 计算过的和常量成员(如下所示)。 简短地说,不带初始化器的枚举或者被放在第一的位置,或者被放在使用了数字常量或其它常量初始化了的枚举后面。

enum E {
    A = getSomeValue(),
    B, // error! 'A' is not constant-initialized, so 'B' needs an initializer
    C
}

Any

任意类型,可跳过类型检查

Void

  • 没有任何类型,常用来表示函数没有返回值时
  • 生命void变量,只能对其赋值null/undefined

Null 和 Undefined

  • 默认情况下null和undefined是所有类型的子类型,及设定为number的变量可赋值为null或undefined。
  • 当设置--strictNullChecks标记后,以上操作将报错,可使用联合类型(如,number | undefined | null)。
  • 通过添加!后缀:identifier!从identifier的类型里去除null和undefined
    function fixed(name: string | null): string {
        function postfix(epithet: string) {
            return `${name!.charAt(0)} the ${epithet}`; // name!去除了null值
        }
        return postfix("great");
    }
    

Never

可用来做完整性检查。

never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。

never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

Object

表示非原始类型,也就是除number、string、boolean、symbol、null、undefined之外的类型。

Object 和 Any 区别

Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法。

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

ReadonlyArray

只读Array类型,把所有导致数组变化的方法全部去掉了

let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;
ro[0] = 12; // error
ro.push(5); // error
ro.length = 100; // error
a = ro; // error,不允许ReadonlyArray赋值给普通数组
// 可通过断言来转换类型后赋值
a = ro as number[];