导出一个接口:
export default interface Inner{
fun():void;
}
类去实现一个接口;
实现的时候类型推导出已经引用:
可以使用接口来确保类拥有指定的结构,约束对象,避免很多潜在的小错误。
尤其在写字面量对象时
import Inner from "./Interfaces";
class person implements Inner{
fun(): void {
}
}
命名空间,又称为内部模块,被用于组织一些就有某些内在联系的特性和对象。
使得代码结构更清晰;
可以使用namespace和export关键字。还有这个module,作用差不多!
namespace Comment{
interface Ia{
}
interface Ib{
}
interface Ic{
}
export class A implements Ia,Ib{
}
export class B implements Ia,Ic{
}
export function abc(){
}
}
var obj1 = new Comment.A();
var obj2 = new Comment.B();
注意如果接口或者类,还是变量或者方法,没有在声明之前加export关键字。那么就在外部访问不到。
上面例子就是一个简单的JavaScript 3D引擎代码的一小部分。在3D引擎中有大量的关于矩阵和矢量的计算。
创建了一个Geometry模块,添加一些相关操作和计算;
var obj:Geometry.Iv2 =new Geometry.Vv2(2,3)
obj.normalize();
obj.toArray(function(n:Array<number>){
console.log("x:"+n[0]+"y:"+n[1]);
})
interface Ia{
(name:string):string;
}
var fn:Ia= function Ia(a){
return a
}
console.log(fn("aaa"));///aaa
有可选参数的函数
值得注意的是可选参数必须位于必选参数列表的后面。
增加其函数的灵活性
function add(a:number,b:number,c?:number){
var resulet:number = a+b;
if(c !== undefined){
resulet += c;
}
}
这里写错的话会有提示:类型推论
默认参数:
默认参数位于必选参数之后
undefined == void 0//true
function add(a:number,b:number=0,c?:number){
var resulet:number = a+b;
if(c !== undefined){
resulet += c;
}
}
有剩余参数的函数
开发者传递任意数量的参数
一个剩余参数必须包含一个数组类型
function add(...arr:Array<number>):number{
var sum = arr.reduce((v,t)=>v+t);
return sum;
}
函数重载:
同名不同参数!!!!
function test(value:(number|string|boolean)){
switch(typeof value){
case "string":
return "value is string"
case "number":
return `${value} is number`
}
}