TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译错误
any 任意
number 64位浮点,可以表示整数和分数
string 字符串,``反引号定义多行文本和内嵌表达式
boolean
数组[]
元组[type]已知元素数量和类型的数组,如果存储的元素数据类型不同,则需要使用元组。
enum
void
null 缺失
undefined 未定义
Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型
null 和 undefined 只能被赋值给 void 或本身对应的类型
如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型
let x: number | null | undefined;
never 其他类型
never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环)
声明变量
var [变量名] : [类型] = 值;
声明变量的类型,但没有初始值,变量值会设置为 undefined
声明变量并初始值,但不设置类型类型,该变量可以是任意类型
变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现了重名。
<类型>值 / 值 as 类型
类型断言,之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法
当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。类型推断成功后就固定了,再赋不同类型就会报错
运算符没什么变化
var的作用域是函数作用域
let的作用域是块级作用域
switch 整数或枚举,break不必须,不加就继续执行后面的case
for(j in n) j需要为 string 或 any 类型
for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等
list.forEach((val, idx, array) => { // val: 当前值 // idx:当前index // array: Array }) 无法break 用list.every代替
函数定义
function function_name(param1 [:datatype]= default_value, param2? [:datatype]):return_type { // 语句 return value; }
问号为可选参数,必须最后
...restOfName: string[] 以...为前缀的,它将成为一个由剩余参数组成的数组
我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。
var res = function( [arguments] ) { ... }
内置构造函数
var myFunction = new Function("a", "b", "return a * b");
var arr:number[] = [12,13] var[x,y] = arr // 将数组的两个元素赋值给变量 x 和 y
接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。
interface ages { [index:string]:number }
extends继承,不支持多继承
super 父类
三种访问修饰符 public private protect
对象
var sites = {
site1: "Runoob",
site2: "Google",
sayHello: function () { } // 类型模板
};
sites.sayHello = function () { console.log("hello " + sites.site1); };
sites.sayHello();
对象也可以作为一个参数传递给函数
var sites = { site1:"Runoob", site2:"Google", };
var invokesites = function(obj: { site1:string, site2 :string }) {
console.log("site1 :"+obj.site1) ;
console.log("site2 :"+obj.site2) ;
}
invokesites(sites)