typescript|TypeScript--笔记二(Map对象、联合类型、接口)


TypeScript

  • Map 对象
    • 创建Map对象及初始化
    • Map 相关的函数与属性
  • 联合类型
    • 声明式 联合类型
    • 函数参数使用 联合类型
    • 联合类型数组
  • 接口
    • 示例
  • 联合类型和接口
    • 接口和数组
    • 接口继承

Map 对象 创建Map对象及初始化 TypeScript 使用 Map 类型和 new 关键字来创建 Map:
let myMap = new 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对象中每个元素的值 。

上案例
// 创建 Map let myMap = new Map(); // 设置 Map 对象 myMap.set('name','张三') myMap.set('age',22) myMap.set('sex','男') console.log(myMap.get('name')) // 张三 console.log(myMap.has('sex')) // true console.log(myMap.delete('age')) // true console.log(myMap.size) // 2 console.log(myMap.keys()) // {"name", "sex"} console.log(myMap.values()) // {"张三", "男"} // 迭代 Map 中的 key for (let key of myMap.keys()) { console.log(key); // namesex } // 迭代 Map 中的 value for (let value of myMap.values()) { console.log(value); // 张三男 } // 迭代 Map 中的 key => valueentries()方法ie11之前不可用 for (let entry of nameSiteMapping.entries()) { console.log(entry[0], entry[1]); // name 张三sex 男 } myMap.clear(); //清除 Map console.log(myMap); // Map {}

联合类型 联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。
只能赋值指定的类型,如果赋值其它类型就会报错。
格式: Type1|Type2|Type3

声明式 联合类型
var data:string|number data = https://www.it610.com/article/12 console.log("数字为 "+ data)// 12 data = "https://www.it610.com/article/Runoob" console.log("字符串为 " + data) // Runoob

函数参数使用 联合类型
function myFun(name:string|string[]) { if(typeof name == "string") { console.log(name) } else { var i; for(i = 0; i

联合类型数组
var arr:number[]|string[]; var i:number; arr = [1,2,4] console.log("**数字数组**") for(i = 0; i

接口 接口定义如下:
interface 自定义接口名字 { }

示例 【typescript|TypeScript--笔记二(Map对象、联合类型、接口)】我们定义了一个接口 IPerson,接着定义了一个变量 customer,它的类型是 IPerson。customer 实现了接口 IPerson 的属性和方法。
interface IPerson { firstName:string, lastName:string, sayHi: ()=>string } var customer:IPerson = { firstName:"Tom", lastName:"Hanks", sayHi: ():string =>{return "Hi there"} } console.log("Customer 对象 ") console.log(customer.firstName)// Tom console.log(customer.lastName)// Hanks console.log(customer.sayHi())// Hi there

联合类型和接口
interface myOptions { program:string; commandline:string[]|string|(()=>string); // 字符串型数组 | 字符串 | 函数表达式 } // commandline 是字符串 var options:myOptions= {program:"test1",commandline:"Hello"}; console.log(options.commandline) // commandline 是字符串数组 options = {program:"test1",commandline:["Hello","World"]}; console.log(options.commandline[0]); console.log(options.commandline[1]); // commandline 是一个函数表达式 options = {program:"test1",commandline:()=>{return "**Hello World**"; }}; var fn:any = options.commandline; console.log(fn());

接口和数组 接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。
interface namelist { [index:number]:string } var list2:namelist = ["John",1,"Bran"] // 错误元素 1 不是 string 类型 interface ages { [index:string]:number } var agelist:ages; agelist["John"] = 15// 正确 agelist[2] = "nine"// 错误

接口继承 接口继承就是说接口可以通过其他接口来扩展自己。
Typescript 允许接口继承多个接口。
继承使用关键字 extends
语法格式:
单个继承:子接口 extends 父接口 多个继承:子接口 extends 父接口1,父接口2,父接口3,......,父接口n

单个继承 interface Person { age:number } interface Musician extends Person { instrument:string } var drummer = {}; // 等价于 var drummer = {}; drummer.age = 27 drummer.instrument = "Drums" console.log("年龄:"+drummer.age)// 年龄:27 console.log("喜欢的乐器:"+drummer.instrument)// 喜欢的乐器:Drums多个继承 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

    推荐阅读