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 类型。
-
变量作用域
-
全局作用域 ? 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。
-
类作用域 ? 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
-
局部作用域 ? 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。
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)
在方法外部调用局部变量 local_num,会报错全局变量为: 12 10 实例变量: 13
error TS2322: Could not find symbol 'local_num'.