如何创建扩展Typescript中File类型的新类型?

k5ifujac  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(283)

我有一个附件类,它应该是js文件类型的扩展。

export interface Attachment extends File {
    isVideo: boolean;
    url: string;
}

export class Attachment implements File {
    constructor(file: File) {
        Object.assign(this, file);
        this.isVideo = file.type.includes('/video');
        this.url = URL.createObjectURL(file);
    }
}

但是,似乎构造函数中的Object.assign(this, file)不起作用,因为它试图分配给默认File类型的只读属性。这最终得到了一个只有“isVideo”和“url” prop 的对象,这不是故意的。
我该怎么做?有没有更好的办法?

wz8daaqr

wz8daaqr1#

在TypeScript中,不可能直接扩展或子类化File类型,因为它是一个内置类型,其属性是只读的。但是,您可以围绕File对象创建一个 Package 类来实现类似的功能。

ewm0tg9j

ewm0tg9j2#

创建一个类extends File

export class Attachment extends File {
    get isVideo() {
        return this.type.includes('/video');
    }
    getURL() {
        return URL.createObjectURL(this);
    }
}

// the constructor arguments is the same to "File"
const attachment = new Attachment([], "filename.txt");

但如果file已经在外部创建,则应该忘记extends,而将其存储为属性

export class Attachment2 {
    constructor(public file: File) { }
    get isVideo() {
        return this.file.type.includes('/video');
    }
    getURL() {
        return URL.createObjectURL(this.file);
    }
}

const attachment = new Attachment(THE_FILE);

相关问题