我在Date对象上创建了一个基本扩展,它工作正常。以下是我的代码:
date.extensions.ts
export {}
declare global {
interface Date {
toSQLiteString(): string;
}
}
Date.prototype.toSQLiteString = function() {
let tzo = -this.getTimezoneOffset();
let dif = tzo >= 0 ? '+' : '-';
let pad = function(num) {
let norm = Math.abs(Math.floor(num));
return (norm < 10 ? '0' : '') + norm;
};
return this.getFullYear() +
'-' + pad(this.getMonth() + 1) +
'-' + pad(this.getDate()) +
'T' + pad(this.getHours()) +
':' + pad(this.getMinutes()) +
':' + pad(this.getSeconds()) +
dif + pad(tzo / 60) +
':' + pad(tzo % 60);
};
现在,我想在自定义对象上创建一个扩展文件,让我们称之为 MyModel 。此对象在另一个文件中定义,看起来像这样(非常简单的示例)
export class MyObject {
id: number = 0;
name: string = ''
}
现在我想创建一个名为 MyObject.extensions.ts 的文件,并且有一个扩展功能,所以我创建了这个,文件看起来像这样
import { MyObject } from './my-object.ts'
export {}
declare global {
interface MyObject {
getIdAndName(): string;
}
}
MyObject.prototype.getIdAndName = function() {
return this.id + ' - ' + this.name;
};
但是,由于某些原因,我收到了typescript
的错误但是,如果删除文件顶部的import
,错误就会消失,但我会收到不同的错误,如下所示
我正在使用typescript 2.4.2
任何建议非常感谢
答案 0 :(得分:1)
您的类不在模块中的全局命名空间中,您应该扩展模块声明:
import { MyObject } from './my-object'
export {}
declare module './my-object' {
interface MyObject {
getIdAndName(): string;
}
}
MyObject.prototype.getIdAndName = function() {
return this.id + ' - ' + this.name;
};
同时从模块导入中删除.ts
扩展名。