tsconfig.json配置文件
创建一个空ts文件命令:echo '' > index.ts
创建一个tsconfig.json文件: tsc -init
1.include 指定编译文件默认是编译当前目录下所有的ts文件
2.2.exclude 指定排除的文件
3.target 指定编译js 的版本例如es5 es6
4.allowJS 是否允许编译js文件
5.removeComments 是否在编译过程中删除文件中的注释
6.rootDir 编译文件的目录
7.outDir 输出的目录
8.sourceMap 代码源文件
9.strict 严格模式
10.module 默认common.js 可选es6模式 amd umd 等
namespace命名空间
一个文件夹下两个不一样文件名的ts文件,如果两个文件里声明的变量名一样,默认情况下会报错。
解决方法一: 其中一个文件使用expot模块:
export const a = 2;
解决方法二: index.ts文件里给:
index.ts文件里给
namespace A{
export const a=1
}
index1.ts文件里给
namespace B{
export const a=2
}
: console.log(B.a);
//同时呢,还可以嵌套使用:
namespace A{
export namespace C{
export const d=3
}
}
console.log(A.C.d);
// 抽离命名空间:将文件导出:
export namespace B{...}
// 使用时导入: import {B} from './index2'
console.log(B);
// 简化命名空间:
import AAA = A.C //搞一个变量接受
console.log(AAA.d);
// 命名空间的合并:
namespace A{
export const b = 2
}
namespace A{
export const d = 3
}
// 以上这两个重名了,其实就相当于这样:
namespace A{
export const b = 2
export const d = 3
}
console.log(A.b,A.d);
Mixins混入
1.对象混入
interface Name {
name:string
}
interface Age{
age:number
}
interface Sex{
sex:number
}
let a:Name={name:"name"}
let b:Age={age:22}
let c:Sex={sex:1}
let obj=Object.assign(a,b,c)
console.log(obj); //{ name: 'name', age: 22, sex: 1 }
2.类的混入
严格模式要关闭不然编译不过
tsconfig.json文件里: "strict": false,
Object.getOwnPropertyNames()可以获取对象自身的属性,除去他继承来的属性,
对它所有的属性遍历,它是一个数组,遍历一下它所有的属性名
class A{
type: boolean = false;
changeType(){
this.type= !this.type
}
}
class B{
name: string = '你好';
getName():string{
return this.name
}
}
//结合两个mixins实现类
//首先应该注意到的是,没使用extends而是使用implements。 把类当成了接口
//我们可以这么做来达到目的,为将要mixin进来的属性方法创建出占位属性。 这告诉编译器这些成员在运行时是可用的。 这样就能使用mixin带来的便利,虽说需要提前定义一些占位属性
class C implements A,B{
type:boolean,
name:string,
changeType:()=>void
getName:()=>string
}
//最后,创建这个帮助函数,帮我们做混入操作。 它会遍历mixins上的所有属性,并复制到目标上去,把之前的占位属性替换成真正的实现代码
//定义一个帮助函数
mixins(C,[A,B])
function mixins (curClas:any,itemClas:any[]){
itemClas.forEach(item=>{
// console.log(item);//[class A] [class B]
Object.getOwnPropertyNames(item.prototype).forEach(name=>{
curClas.prototype[name] = item.prototype[name]
})
})
}
let ccc = new C()
console.log(ccc.type); //false
ccc.changeType() //changeType函数使 type取反
console.log(ccc.type) //true