let list: any[] = [‘leo’,25,true];
list[1] = ‘lion’;
Null 和 Undefined
null,在 JavaScript 中 null 表示 “什么都没有”。null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是 object。
undefined,在 JavaScript 中, undefined 是一个没有设置值的变量。typeof 一个没有值的变量会返回 undefined。Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型,即其他类型可以转成这两种类型,如字符串类型,此时,赋值后的类型会变成 null 或 undefined。
let num: number;
num = 1; // 运行正确
num = undefined; // 运行正确,此时为undefined类型
num = null; // 运行正确,此时为null类型
Never
never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环),示例代码如下:
let n: never;
let num: number;
// 运行错误,数字类型不能转为never类型
n = 123;
// 运行正确,never 类型可以赋值给never类型
n = (()=>{ throw new Error(‘exception’)})();
// 运行正确,never 类型可以赋值给数字类型
num = (()=>{ throw new Error(‘exception’)})();
// 返回值为never的函数可以是抛出异常的情况
function error(message: string): never {
throw new Error(message);
}
// 返回值为never的函数可以是无法被执行到的终止点的情况
function loop(): never {
while (true) {}
}
TypeScript变量声明
TypeScript 变量的命名规则:
1、变量名称可以包含数字和字母。
2、除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。
3、变量名不能以数字开头。
以下为四种声明变量的方式
//var [变量名] : [类型] = 值; 声明变量的类型及初始值
var uname:string = “leo”;
//var [变量名] : [类型]; 声明变量的类型,但没有初始值,变量值会设置为undefined
var uname:string;
//var [变量名] = 值; 声明变量并初始值,但不设置类型,该变量可以是任意类型
var uname = “leo”;
//var [变量名]; 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为undefined
var uname;
//总结:声明时,没有类型,类型就是any;没有初始值,初始值就是undefined
实例:
var uname:string = “leo”;
var age:number = 25;
//对应js
var uname = “leo”;
var age = 25;
TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误,而JavaScript则不会,因为她是弱类型语言,如下实例:
var num:number = “leo” // 编译错误
//对应的js
var num = 100
num = “leo” // 编译不报错
类型推断
当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。
var num = 100; // 类型推断为 number
num = “leo”; // 编译错误,相当于上例 var num:number = “leo”
变量作用域
TypeScript 有以下几种作用域:
全局作用域 − 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。
类作用域 − 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
局部作用域 − 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。
如以下例子:
var global_num = 10 // 全局变量
class Person {
age = 18; // 实例变量
static score = 100; // 静态变量
eat():void {
var food = ‘apple’; // 局部变量
}
}
console.log("全局变量为: " + global_num)
console.log(Person.score) // 静态变量,直接通过类名访问
var person = new Person();
console.log("实例变量: " + person.age)
TypeScript的运算符、条件语句、循环与JavaScript基本一致。
TypeScript函数
function function_name()
{
// 执行代码
}
//调用函数
function_name()
函数返回值
TypeScrip