TypeScript入门

59 阅读5分钟

数据类型


// ***** 基本数据类型 ******
let x: any = 1; // 动态类型类似dart的dynamic

let binaryLiteral: number = 0b1010;     // 二进制
let octalLiteral: number = 0o744;       // 八进制
let decLiteral: number = 6;             // 十进制
let hexLiteral: number = 0xf00d;        // 十六进制

let name: string = "Runoob";

let flag: boolean = true;

let arr: number[] = [1, 2];
let arr: Array<number> = [1, 2];
let x: [string, number] = ['Runoob', 1];

enum Color {Red, Green, Blue};
let c: Color = Color.Blue;

function hello(): void {
    alert("Hello Runoob");
}
  • 注意:Null 和 Undefine用法
// 启用 --strictNullChecks
let y: number;
y = 1;              // 编译正确
y = null;           // 编译失败
y = undefined;      //编译失败
// 如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型
let x: number | null | undefined;
x = 1;              // 编译正确
x = undefined;      // 编译正确
x = null;           // 编译正确

变量作用域

var global_num = 12          // 全局变量
class Numbers { 
   num_val = 13;             // 实例变量
   static sval = 10;         // 静态变量
   
   storeNum():void { 
      var local_num = 14;    // 局部变量
   } 
} 
console.log("全局变量为: "+global_num)  
console.log(Numbers.sval)   // 静态变量
var obj = new Numbers(); 
console.log("实例变量: "+obj.num_val)

条件判断

  • if...else if...else
var num = 2;
if (num > 0) {
    console.log(num + " 是正数");
}
else if (num < 0) {
    console.log(num + " 是负数");
}
else {
    console.log(num + " 不是正数也不是负数");
}
  • switch...case
switch(expression) {
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

循环

  • for
for (var val in list) { 
    //语句 
}
  • for...in
var j:any; 
var n:any = "a b c" 
 
for(j in n) {
    console.log(n[j])  
}
  • for...of 在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach()

for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

let someArray = [1, "string", false];
 
for (let entry of someArray) {
    console.log(entry); // 1, "string", false
}
  • forEach
// 简单的遍历数组
let list = [4, 5, 6];
list.forEach((val, idx, array) => {
    // val: 当前值
    // idx:当前index
    // array: Array
});
  • every
let list = [4, 5, 6];
// 判定list数组中的元素是否都大于等于4
let result = list.every((val, idx, array) => {
    // val: 当前值
    // idx:当前index
    // array: Array
    return val >= 4;
});
  • some
let list = [4, 5, 6];
// 判定list数组中的元素是否存在大于等于5的元素
let result = list.every((val, idx, array) => {
    // val: 当前值
    // idx:当前index
    // array: Array
    return val >= 5;
});
  • while
// 输出 5 然后程序执行结束
var i:number = 1 
while(i<=10) { 
    if (i % 5 == 0) {   
        console.log ("在 1~10 之间第一个被 5 整除的数为 : "+i) 
        break     // 找到一个后退出循环
    } 
    i++ 
}
  • do...while
// 先执行循环体,再判断条件
do
{
   statement(s);
} while( condition );
  • 无限循环

for(;;) {
   // 语句
}

while(true) {
   // 语句
}

字典

const myMap = new Map<string, number>();

// 添加键值对
myMap.set('key1', 1);
myMap.set('key2', 2);
myMap.set('key3', 3);

// 获取键对应的值
console.log(myMap.get('key1')); // 输出:1

// 删除键值对
myMap.delete('key2');

// 遍历Map对象
for (const [key, value] of myMap) {
  console.log(`${key}: ${value}`);
}

// 清空Map对象
myMap.clear();

JSON

使用对象字面量构建一个快速构建JSON对象

const jsonObject = {
  key1: "value1",
  key2: "value2",
  key3: "value3"
};

数组

  • 数组声明
var numlist:number[] = [2,4,6,8];
  • 常用方法
  • concat ####[连接两个或更多的数组,并返回结果]
  • every #####[检测数值元素的每个元素是否都符合条件]
  • some #####[是否有元素符合条件并返回]
  • filter #####[过滤数值元素,并返回符合条件所有元素的数组]
  • forEach ###[数组每个元素都执行一次回调函数]
  • indexOf ###[搜索数组中的元素,并返回它所在的位置]
  • join ######[把数组的所有元素放入一个字符串]
  • lastIndexOf#[从后往前搜索指定的元素]
  • map ######[对数组元素内容进行变换]
  • pop ######[栈方法,弹出栈头元素]
  • push #####[栈方法,元素入栈]
  • reverse ###[翻转元素顺序]
  • slice #####[数组进行切片]
  • sort #####[对数组元素进行排序]

函数

  • 定义
function function_name()
{
    // 执行代码
}

字符串

  • 声明
var txt = new String("string");
或者更简单方式:
var txt = "string";
  • 常用方法
charAt              // 返回在指定位置的字符
charCodeAt          // 返回在指定的位置的字符的 Unicode 编码
concat              // 连接两个或更多字符串,并返回新的字符串
indexOf             // 返回某个指定的字符串值在字符串中首次出现的位置
lastIndexOf         // 从后向前搜索字符串,并返回找到的位置
match               // 查找找到一个或多个正则表达式的匹配
replace             // 替换与正则表达式匹配的子串
search              // 检索与正则表达式相匹配的值
slice               // 提取字符串的片断
split               // 把字符串分割为子字符串数组
substring           // 提取字符串中两个指定的索引号之间的字符

Math用法

  • 常用的方法如下
Math.abs(x):返回x的绝对值。
Math.ceil(x):返回大于或等于x的最小整数。
Math.floor(x):返回小于或等于x的最大整数。
Math.max(x, y, z, ..., n):返回n个参数中的最大值。
Math.min(x, y, z, ..., n):返回n个参数中的最小值。
Math.pow(x, y):返回x的y次幂。
Math.random():返回一个介于0(包含)和1(不包含)之间的随机数。
Math.round(x):返回四舍五入后的整数。
Math.sqrt(x):返回x的平方根。
Math.sin(x):返回x的正弦值。
Math.cos(x):返回x的余弦值。
Math.tan(x):返回x的正切值。
Math.PI:π的值。
Math.E:e的值。
Math.SQRT1_21/√2的值。
Math.SQRT2:√2的值。
Math.LOG2E:以2为底e的对数值。
Math.LOG10E:以10为底e的对数值。
Math.LN2:以2为底的自然对数。
Math.LN10:以10为底的自然对数。
Math.LOG210:以2为底10的对数值。
Math.EXPM1:e-1的值。
Math.FLOOR(x):返回小于或等于x的最大整数。
Math.FROUND(x):返回四舍五入到最接近的整数的值。
Math.trunc(x):返回去除小数部分后的值。

日期用法

  • 基本用法
const currentDate = new Date();
console.log(currentDate.getFullYear()); // 输出当前年份
console.log(currentDate.getMonth()); // 输出当前月份
console.log(currentDate.getDate()); // 输出当前日期
console.log(currentDate.getDay()); // 输出当前星期几
console.log(currentDate.getHours()); // 输出当前小时数
console.log(currentDate.getMinutes()); // 输出当前分钟数
console.log(currentDate.getSeconds()); // 输出当前秒数
  • 比较大小
if (date1 > date2) {
  console.log('date1 is later than date2');
} else if (date1 < date2) {
  console.log('date1 is earlier than date2');
} else {
  console.log('date1 and date2 are the same');
}

十六进制、十进制的转化

function hexToDecimal(hex) {
  return parseInt(hex, 16);
}

const hex = "1A";
const decimal = hexToDecimal(hex);
console.log(decimal); // 输出:26

定时器


let timer: any;
timer = setTimeout(() => { console.log('此处声明了一个定时器') }, 1000);

let timer: any;
timer = setInterval(() => { console.log('定时器') }, 1000);