营销的网站建设公司,大连城乡建设局官网,南京最好的网页制作公司,wordpress怎么定义不同的侧边栏目录 1、TypeScript 接口
1.1、实例
1.2、联合类型和接口
1.3、接口和数组
1.4、接口和继承
1.5、单继承实例
1.6、多继承实例
2、TypeScript 对象
2.2、对象实例
2.3、TypeScript类型模板
2.4、鸭子类型#xff08;Duck typing#xff09; 1、TypeScript 接口 接口…目录 1、TypeScript 接口
1.1、实例
1.2、联合类型和接口
1.3、接口和数组
1.4、接口和继承
1.5、单继承实例
1.6、多继承实例
2、TypeScript 对象
2.2、对象实例
2.3、TypeScript类型模板
2.4、鸭子类型Duck typing 1、TypeScript 接口 接口是一系列抽象方法的声明是一些方法特征的集合这些方法都应该是抽象的需要由具体的类去实现然后第三方就可以通过这组抽象方法调用让具体的类执行具体的方法。 TypeScript 接口定义如下
interface interface_name {
}
1.1、实例 以下实例中我们定义了一个接口 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)
console.log(customer.lastName)
console.log(customer.sayHi()) var employee:IPerson { firstName:Jim,lastName:Blakes, sayHi: ():string {return Hello!!!}
} console.log(Employee 对象 )
console.log(employee.firstName)
console.log(employee.lastName) 需要注意接口不能转换为 JavaScript。 它只是 TypeScript 的一部分。 编译以上代码得到以下 JavaScript 代码
var customer {firstName: Tom,lastName: Hanks,sayHi: function () { return Hi there; }
};
console.log(Customer 对象 );
console.log(customer.firstName);
console.log(customer.lastName);
console.log(customer.sayHi());
var employee {firstName: Jim,lastName: Blakes,sayHi: function () { return Hello!!!; }
};
console.log(Employee 对象 );
console.log(employee.firstName);
console.log(employee.lastName); 输出结果为
Customer 对象
Tom
Hanks
Hi there
Employee 对象
Jim
Blakes
1.2、联合类型和接口 以下实例演示了如何在接口中使用联合类型
interface RunOptions { program:string; commandline:string[]|string|(()string);
} // commandline 是字符串
var options:RunOptions {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()); 编译以上代码得到以下 JavaScript 代码
// commandline 是字符串
var options { 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: function () { return **Hello World**; } };
var fn options.commandline;
console.log(fn()); 输出结果为
Hello
Hello
World
**Hello World**
1.3、接口和数组 接口中我们可以将数组的索引值和元素设置为不同类型索引值可以是数字或字符串。 设置元素为字符串类型
interface namelist { [index:number]:string
} // 类型一致正确
var list2:namelist [Google,Runoob,Taobao]
// 错误元素 1 不是 string 类型
// var list2:namelist [Runoob,1,Taobao] 如果使用了其他类型会报错
interface namelist { [index:number]:string
} // 类型一致正确
// var list2:namelist [Google,Runoob,Taobao]
// 错误元素 1 不是 string 类型
var list2:namelist [John,1,Bran] 执行后报错如下显示类型不一致
script.ts(8,30): error TS2322: Type number is not assignable to type string. 设置元素为数字类型数组索引值为字符串
interface ages { [index:string]:number
} var agelist:ages; // 类型正确
agelist[runoob] 15 // 类型错误输出 error TS2322: Type google is not assignable to type number.
// agelist[2] google
1.4、接口和继承 接口继承就是说接口可以通过其他接口来扩展自己。Typescript 允许接口继承多个接口。继承使用关键字 extends。单接口继承语法格式
Child_interface_name extends super_interface_name 多接口继承语法格式
Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name 继承的各个接口使用逗号 , 分隔。 1.5、单继承实例
interface Person { age:number
} interface Musician extends Person { instrument:string
} var drummer Musician{};
drummer.age 27
drummer.instrument Drums
console.log(年龄: drummer.age)
console.log(喜欢的乐器: drummer.instrument) 编译以上代码得到以下 JavaScript 代码
var drummer {};
drummer.age 27;
drummer.instrument Drums;
console.log(年龄: drummer.age);
console.log(喜欢的乐器: drummer.instrument); 输出结果为
年龄: 27
喜欢的乐器: Drums
1.6、多继承实例
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) 编译以上代码得到以下 JavaScript 代码
var Iobj { v1: 12, v2: 23 };
console.log(value 1: Iobj.v1 value 2: Iobj.v2); 输出结果为
value 1: 12 value 2: 23
2、TypeScript 对象 对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等如下实例
var object_name { key1: value1, // 标量key2: value, key3: function() {// 函数}, key4:[content1, content2] //集合
} 以上对象包含了标量函数集合(数组或元组)。
2.2、对象实例
var sites { site1:Runoob, site2:Google
};
// 访问对象的值
console.log(sites.site1)
console.log(sites.site2) 编译以上代码得到以下 JavaScript 代码
var sites { site1:Runoob, site2:Google
};
// 访问对象的值
console.log(sites.site1)
console.log(sites.site2) 输出结果为 2.3、TypeScript类型模板 假如我们在 JavaScript 定义了一个对象
var sites { site1:Runoob, site2:Google
}; 这时如果我们想在对象中添加方法可以做以下修改
sites.sayHello function(){ return hello;} 如果在 TypeScript 中使用以上方式则会出现编译错误因为Typescript 中的对象必须是特定类型的实例。
var sites {site1: Runoob,site2: Google,sayHello: function () { } // 类型模板
};
sites.sayHello function () {console.log(hello sites.site1);
};
sites.sayHello(); 编译以上代码得到以下 JavaScript 代码
var sites {site1: Runoob,site2: Google,sayHello: function () { } // 类型模板
};
sites.sayHello function () {console.log(hello sites.site1);
};
sites.sayHello();
输出结果为
hello Runoob 此外对象也可以作为一个参数传递给函数如下实例
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) 编译以上代码得到以下 JavaScript 代码
var sites {site1: Runoob,site2: Google
};
var invokesites function (obj) {console.log(site1 : obj.site1);console.log(site2 : obj.site2);
};
invokesites(sites); 输出结果为
site1 :Runoob
site2 :Google
2.4、鸭子类型Duck typing 鸭子类型英语duck typing是动态类型的一种风格是多态(polymorphism)的一种形式。 在这种风格中一个对象有效的语义不是由继承自特定的类或实现特定的接口而是由当前方法和属性的集合决定。 可以这样表述 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子那么这只鸟就可以被称为鸭子。 在鸭子类型中关注点在于对象的行为能做什么而不是关注对象所属的类型。例如在不使用鸭子类型的语言中我们可以编写一个函数它接受一个类型为鸭子的对象并调用它的走和叫方法。在使用鸭子类型的语言中这样的一个函数可以接受一个任意类型的对象并调用它的走和叫方法。如果这些需要被调用的方法不存在那么将引发一个运行时错误。任何拥有这样的正确的走和叫方法的对象都可被函数接受的这种行为引出了以上表述这种决定类型的方式因此得名。
interface IPoint { x:number y:number
}
function addPoints(p1:IPoint,p2:IPoint):IPoint { var x p1.x p2.x var y p1.y p2.y return {x:x,y:y}
} // 正确
var newPoint addPoints({x:3,y:4},{x:5,y:1}) // 错误
var newPoint2 addPoints({x:1},{x:4,y:3})