类型'MyObject'上不存在属性 - Typescript扩展名

时间:2017-09-13 09:19:44

标签: javascript typescript web typescript2.0

我在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

的错误

enter image description here

但是,如果删除文件顶部的import,错误就会消失,但我会收到不同的错误,如下所示

enter image description here

我正在使用typescript 2.4.2

任何建议非常感谢

1 个答案:

答案 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扩展名。