ts_类型系统_typeof

49 阅读1分钟

js下,typeof 返回操作值的类型 值为"字符串"

    //null 为空对象 ,所以属于object类型
    typeof undefined; // "undefined"
    typeof true; // "boolean"
    typeof 1337; // "number"
    typeof "foo"; // "string"
    typeof {}; // "object"
    typeof parseInt; // "function"
    typeof Symbol(); // "symbol"
    typeof 127n // "bigint"

ts下 typeof运算符主要参与类型运算,它返回操作值的ts类型,而不是字符串

类型运算的情况: 1变量宣告类型时,2定义类型时

    let data = {
        code:200,
        detail:{
            list:[{title:'xxx'}],
        }
    }
    
    // 变量宣告类型时
    let data2:typeof data = {       
        code:200,
        detail:{
            list:[{title:'xxx'}],
        }
    }
    // 定义类型时,定义的data类型采取data推断出的类型
    type data = typeof data
        let data3:data = {
            code:200,
            detail:{
                list:[{title:'xxx'}],
        }
    }

同一段代码可能存在两种typeof运算符,一种是类型运算,一种是值运算.

    let a = 1;
    let b:typeof a;
    if (typeof a === 'number') {
      b = a;
    }

由于编译时不会进行 JavaScript 的值运算,所以TypeScript 规定,typeof 的参数只能是标识符 不能是需要运算的表达式