TS2322:类型'文件'不能分配给'typeof File'类型

时间:2018-05-16 15:01:25

标签: typescript asynchronous types

  

TS2322:类型'文件'不能分配给'typeof File'类型。   属性“原型”中缺少类型“文件”。

我收到此错误。我不知道为什么我得到它,我不知道如何解决它。如果有人愿意帮助我,我会非常感激!

我有这个公共类属性:

registry = File;

getRegistryFile函数:

private async getRegistryFile(): Promise<File> {
        if (this.files === undefined || this.files.length === 0) {
            return Promise.reject('No files where returned from the server.');
        }

        const registryFileName = await this.createRegistryFileName();

        this.files.forEach((element) => {
            if (element === registryFileName) {
                console.log('File registry found.');
                return Promise.resolve(element);
            }
        });
    }

我正在构建的功能:

public WorkInProgress(file: File) {
    this.getRegistryFile().then((file) => this.registry = file);
}

2 个答案:

答案 0 :(得分:4)

  

我有这个公共类属性:

registry = File;

这是registry属性的声明,应该有File类型吗?那应该是

registry: File;

或者它是一个包含File类构造函数的属性的初始化?那么它的类型实际上是typeof File,它不能用作File的实例。

答案 1 :(得分:2)

请参阅@artem的推荐:registry: File不是registry = File 另外,你不能从Array.forEach()返回一个值(你试图返回一个Promise),而是这样做:

private async getRegistryFile(): Promise<File> {
    if (this.files === undefined || this.files.length === 0) {
        return Promise.reject('No files where returned from the server.');
    }

    const registryFileName = await this.createRegistryFileName();

    for (let element of this.files) { // replaced Array.forEach with for-of loop
        if (element === registryFileName) {
            console.log('File registry found.');
            return Promise.resolve(element);
        }
    };
    return Promise.reject(new Error("File not found"));
}