TypeScript四

简介: ## 联合类型联合类型使用`|`分隔,表示变量可为多种类型:```cvar val: string | number;val = 12; // OKval = "Runoob"; // OK`

7、Map 对象

Map 对象保存键值对,并且能够记住键的原始插入顺序。

任何值(对象或者原始值) 都可以作为一个键或一个值。

Map 是 ES6 中引入的一种新的数据结构,可以参考 ES6 Map 与 Set。

7.1、创建 Map

创建初始化 Map,可以以数组的格式来传入键值对:

let myMap = new Map([
        ["key1", "value1"],
        ["key2", "value2"]
    ]);

Map 相关的函数与属性:

  • map.clear() – 移除 Map 对象的所有键/值对 。
  • map.set() – 设置键值对,返回该 Map 对象。
  • map.get() – 返回键对应的值,如果不存在,则返回 undefined。
  • map.has() – 返回一个布尔值,用于判断 Map 中是否包含键对应的值。
  • map.delete() – 删除 Map 中的元素,删除成功返回 true,失败返回 false。
  • map.size – 返回 Map 对象键/值对的数量。
  • map.keys() - 返回一个 Iterator 对象, 包含了 Map 对象中每个元素的键 。
  • map.values() – 返回一个新的Iterator对象,包含了Map对象中每个元素的值 。
let nameSiteMapping = new Map();

// 设置 Map 对象
nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);

// 获取键对应的值
console.log(nameSiteMapping.get("Runoob"));     // 2

// 判断 Map 中是否包含键对应的值
console.log(nameSiteMapping.has("Taobao"));       // true
console.log(nameSiteMapping.has("Zhihu"));        // false

// 返回 Map 对象键/值对的数量
console.log(nameSiteMapping.size);                // 3

// 删除 Runoob
console.log(nameSiteMapping.delete("Runoob"));    // true
console.log(nameSiteMapping);//Map { 'Google' => 1, 'Taobao' => 3 }
// 移除 Map 对象的所有键/值对
nameSiteMapping.clear();             // 清除 Map
console.log(nameSiteMapping);//Map {}

7.2、迭代 Map

TypeScript使用 for...of 来实现迭代:

let nameSiteMapping = new Map();

nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);

// 迭代 Map 中的 key
for (let key of nameSiteMapping.keys()) {
   
    console.log(key);                  
}
// Google
// Runoob
// Taobao

// 迭代 Map 中的 value
for (let value of nameSiteMapping.values()) {
   
    console.log(value);                 
}
// 1
// 2
// 3

// 迭代 Map 中的 key => value
for (let entry of nameSiteMapping.entries()) {
   
    console.log(entry[0], entry[1]);   
}
// Google 1
// Runoob 2
// Taobao 3

// 使用对象解析
for (let [key, value] of nameSiteMapping) {
   
    console.log(key, value);            
}
// Google 1
// Runoob 2
// Taobao 3

使用 es6 编译:

tsc --target es6 test.ts

8、元组

我们知道数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。

元组中允许存储不同类型的元素,元组可以作为参数传递给函数。

8.1、定义 访问元组

var mytuple = [10,"Runoob"]; // 创建元组
console.log(mytuple[0]) //10

8.2、元组运算

  • push() 向元组添加元素,添加在最后面。

  • pop() 从元组中移除元素(最后一个),并返回移除的元素。

var mytuple = [10,"Hello","World","typeScript"]; 
console.log("添加前元素个数:"+mytuple.length)    // 返回元组的大小,4

mytuple.push(12)                                    // 添加到元组中
console.log("添加后元素个数:"+mytuple.length) // 添加后元素个数:5
console.log("删除前元素个数:"+mytuple.length)  // 删除前元素个数:5
console.log(mytuple.pop()+" 元素从元组中删除") // 删除并返回删除的元素 12

console.log("删除后元素个数:"+mytuple.length) // 删除后元素个数:4

8.3、解构元组

var a =[10,"Runoob"]
var [b,c] = a
console.log( b ) // 10
console.log( c ) // Runoob

9、 联合类型

联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。

注意:只能赋值指定的类型,如果赋值其它类型就会报错。

var val:string|number 
val = 12 
console.log("数字为 "+ val)  // 数字为 12
val = "Runoob" 
console.log("字符串为 " + val) // 字符串为 Runoob

将联合类型作为函数参数使用:

function disp(name:string|string[]) {
    
        if(typeof name == "string") {
    
                console.log(name) 
        } else {
    
                var i; 
                for(i = 0;i<name.length;i++) {
    
                console.log(name[i])
                } 
        } 
} 
disp("Runoob") // Runoob
console.log("输出数组....") // 输出数组....
disp(["Runoob","Google","Taobao","Facebook"])
//Runoob
//Google
//Taobao
//Facebook

10、 TypeScript 接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

10.1、联合类型和接口

interface IPerson {
    
    firstName:string, 
    lastName:string, 
    sayHi: ()=>string 
    commandline:string[]|(()=>string); 
} 

var customer:IPerson = {
    
    firstName:"Tom",
    lastName:"Hanks", 
    sayHi: ():string =>{
   return "Hi there",
    commandline:()=>{
   return "**Hello World**";}} 

} 

console.log("Customer 对象 ") // Customer 对象
console.log(customer.firstName) // Tom
console.log(customer.lastName) // Hanks
console.log(customer.sayHi())  //Hi there
console.log(customer.commandline())  //**Hello World**

var employee:IPerson = { 
    firstName:"Jim",
    lastName:"Blakes", 
    sayHi: ():string =>{return "Hello!!!",
    commandline:["Hello","World"]} 
} 

console.log("Employee  对象 ") // Employee  对象
console.log(employee.firstName) // Jim
console.log(employee.lastName) // Blakes
console.log(customer.commandline())  //Hello
//World

10.2、接口和数组

接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。

interface namelist {
    
// 索引值是number,值是string
   [index:number]:string 
} 

// 类型一致,正确
var list2:namelist = ["Google","Runoob","Taobao"]
// 错误元素 1 不是 string 类型
// var list2:namelist = ["Runoob",1,"Taobao"]
interface ages {
    
// inde 是string 值是number
   [index:string]:number 
} 

var agelist:ages; 
 // 类型正确 
agelist["runoob"] = 15  

// 类型错误,输出  error TS2322: Type '"google"' is not assignable to type 'number'.
// agelist[2] = "google"

10.3、多继承实例

interface IParent1 {
    
    v1:number 
} 

interface IParent2 {
    
    v2:number 
} 

interface Child extends IParent1, IParent2 {
    } 
var Iobj:Child = {
    v1:12, v2:23} 
console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2) // value 1: 12 value 2: 23
相关文章
|
6天前
|
JavaScript 前端开发 开发者
TypeScript一
JavaScript开发迅速但维护成本高,适合小型项目,因其动态类型导致编辑器提示不全。TypeScript是JS超集,增加了类型系统,提高开发效率和代码质量。安装TypeScript需先安装Node.js,然后通过npm安装tsc。案例演示创建`.ts`文件,转换成`.js`并运行。TypeScript支持多种数据类型,如any、number、string等,并有严格变量声明和函数定义规则,包括函数重载和匿名函数。
|
6天前
|
JavaScript 前端开发
TypeScript二
JavaScript Number对象包含多种方法,如`toExponential()`将数值转化为指数形式,`toFixed()`保留指定位数的小数,`toLocaleString()`按本地格式显示数字,`toPrecision()`格式化数字到指定长度,`toString()`以指定基数表示数字,而`valueOf()`返回原始数值。此外,示例中还展示了Date对象的格式化方法。对于String对象,有`constructor`返回创建对象的函数,`length`获取字符串长度,`prototype`用于扩展对象,以及一系列如`charAt()`、`indexOf()
|
6天前
|
开发框架 JavaScript 前端开发
什么是TypeScript
什么是TypeScript
12 0
|
6天前
|
JavaScript 前端开发 Java
TypeScript
TypeScript是JavaScript的一个超集,简称ts,ts是能够完全兼容js的ts是一门静态类型的语言,js是动态类型的语言
34 0
|
9月前
|
JavaScript
TypeScript(一)
TypeScript(一)
|
JSON JavaScript 前端开发
Typescript知识总结(1)
Typescript知识总结(1)
Typescript知识总结(1)
|
JavaScript 前端开发 编译器
【TypeScript】一文带你了解什么是TypeScript
【TypeScript】一文带你了解什么是TypeScript
【TypeScript】一文带你了解什么是TypeScript
typescript91-添加任务基本实现
typescript91-添加任务基本实现
68 0
typescript91-添加任务基本实现
typescript1-typescript是什么
typescript1-typescript是什么
47 0
typescript1-typescript是什么