TypeScript5 (tsconfig.json配置文件|namespace命名空间 |Mixins混入)

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值