TypeScript(一)


npm安装 —— 以管理员身份运行

基础类型

  • null

null是一个只有一个值的特殊类型。表示一个空对象引用。

用 typeof 检测 null 返回是 object。

  • undefined

typeof 一个没有值的变量会返回 undefined。

Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,赋值后的类型会变成 null 或 undefined。

启用严格的空校验(--strictNullChecks)—— null 和 undefined 只能被赋值给 void 或本身对应的类型

"strictNullChecks": true,
    
    
    let x: number;
x = 1; // 运行正确
x = undefined;    // 运行错误
x = null;    // 运行错误

 如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型

let x: number | null | undefined;
x = 1; // 运行正确
x = undefined;    // 运行正确
x = null;    // 运行正确
  • never 类型

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环)

let x: never;
let y: number;

// 运行错误,数字类型不能转为 never 类型
x = 12;

// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();

// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})();

// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
    throw new Error(message);
}

// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
    while (true) {}
}
  • any

不建议使用——使用 unknown

// d的类型是any,它可以赋值给任意变量
// s = d;
e1 = 'hello';

// unknown 实际上就是一个类型安全的any
// unknown类型的变量,不能直接赋值给其他变量
if(typeof e1 === "string"){
    s = e1;
}

变量声明

//1
var rd:string = "Dash";
//2
var rd:string;
//3
var rd = "Dash";
//4 类型可以是任意类型,默认初始值为 undefined
var rd;
  • TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误
var num:number = "hello"
  • 类型断言(Type Assertion)

允许变量从一种类型更改为另一种类型,

TypeScript 是怎么确定单个断言是否足够:当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。

var str1 = '1'
var str2:number =   str1   //str1、str2 是 string 类型
console.log(str2) //1
  • 类型推断

当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。

  • 变量作用域

  1. 全局作用域 ? 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。

  2. 类作用域 ? 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。

  3. 局部作用域 ? 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。

    var g_num = 12          // 全局变量
    class Numbers { 
       num_val = 13;             // 实例变量
       static sval = 10;         // 静态变量
       
       storeNum():void { 
          var local_num = 14;    // 局部变量
       } 
    } 
    console.log("全局变量为: "+g_num)  
    console.log(Numbers.sval)   // 静态变量
    var obj = new Numbers(); 
    console.log("实例变量: "+obj.num_val)
    全局变量为: 12
    10
    实例变量: 13
    在方法外部调用局部变量 local_num,会报错
    error TS2322: Could not find symbol 'local_num'.