TypeScript定义小技巧
函数重载
makeDate.ts
export function makeDate(timestamp: number): Date;
export function makeDate(m: number, d: number, y: number): Date;
export function makeDate(mOrTimestamp: number, d?: number, y?: number): Date {
if (d !== undefined && y !== undefined) {
return new Date(y, mOrTimestamp, d);
} else {
return new Date(mOrTimestamp);
}
}
const d1 = makeDate(12345678);
const d2 = makeDate(5, 5, 5);
const d3 = makeDate(1, 3);
note
- 如果需要导出(export)函数, 那每个函数定义都要导出(export)
- 实际代码实现要写在参数最多那个重载定义里
也可以借助interface
或者type
实现:
makeDate.ts
interface MakeDateDef {
(val: string): Date
(year: number, month: number): Date
}
export const makeDate: MakeDateDef = function(valOrYear: string | number, month?: number) {
/**
* 具体函数实现
*/
}
函数属性/字段定义
使用 type
定义
loadJs.ts
type LoadJsDef = {
(src: string): Promise<string>
__caches: { [key: string]: Promise<string> }
}
export const loadJs: LoadJsDef = function (src: string) {
/** 函数实现*/
loadJs.__caches["url"] = Promise.resolve("values");
};
loadJs.__caches = { };
或者使用 interface
:
loadJs.ts
interface LoadJsDef {
(src: string): Promise<string>
__caches: { [key: string]: Promise<string> }
}
export const loadJs: LoadJsDef = function (src: string) {
/** 函数实现*/
loadJs.__caches["url"] = Promise.resolve("values");
};
loadJs.__caches = { };