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

Property does not exist on type 'MyObject' - Typescript extension

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

但是,由于某种原因,我收到了打字稿错误

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

我正在使用打字稿 2.4.2

非常感谢任何建议

您的 class 不在模块中的全局命名空间中,您应该扩展模块声明:

import { MyObject } from './my-object'

export {}

declare module './my-object' {
    interface MyObject {
        getIdAndName(): string;
    }
}

MyObject.prototype.getIdAndName = function() {
    return this.id + ' - ' + this.name;
};

同时从模块导入中删除 .ts 扩展。