最近在研究如何在Angular8中自己编写和使用d.ts,首先说明一下d.ts文件的作用,d.ts的作用适用于在ts中使用js文件,可以帮助我们提示变量或者方法中参数的类型,使得编程更加规范(个人理解)。
1、toast.js文件如下:
var lettersRegexp="aaaa";
const toasttest = function toasttest(a,b){
return a+b;
};
export default{toasttest,lettersRegexp};
我这里使用的是export default如果直接使用export或者module.exports,会提示is not a function,
具体使用哪一种与你在tsconfig.json中配置的module相关,具体使用AMD、CommandJs还是ES6,自行百度,我这里是ES6
2、toast.d.ts文件如下:
declare module "toast" {
export function toasttest(a: number, b: number): number;//
export let lettersRegexp:string;
}
js和d.ts文件需要在同一目录下,并且js文件名称需要与d.ts中的module名称相同,
3、需要在tsconfig.json中配置paths路径,通过配置该路径,才可以找到js以及d.ts文件,我想js和d.ts文件应该是可以分开的存放的,只是目前我还不清楚怎么配置,以及paths配置的路径时d.ts的路径还是js的路径,目前还不清楚。
4、在使用该js模块的ts文件中,加入///
5、在ts中引用该JS文件
import toast from 'toast';导入模块toast
import {error} from 'toast';导入toast模块中的方法toasttest
6、因为项目中以前写的JS都是requireJS,toast.js文件如下(代码只是结构示例):
define([], function() {
return {
toast: function(className, message) {
},
info: function(message) {
},
error: function(tag, message, error) {
}
warn: function(tag, message, error) {
}
});
toast.d.ts如下:
declare module "toast" {
export function toast(className: string, message: string): void;//
export function info(message: string): void;//
export function error(tag: any, message: string, error: any): void;//
export function warn(tag: any, message: string, error: any): void;//
}
发现上面的配置同样有效,就没必要在js文件中通过export default{}导出方法。
注:这篇文章只是自己记录解决的问题,以便以后使用,还有很多已获得地方,待后面更好的理解在来补充。