typescript 如何用不兼容的类型重写库接口中的属性?

jvidinwx  于 2022-12-19  发布在  TypeScript
关注(0)|答案(1)|浏览(204)

我有一个声明接口的库。

export interface Block {
    readonly type: BlockType
}

export enum BlockType {
    content = 'content',
    html = 'html',
    section = 'section',
}

这个库 Package 了一个API,但是,当我在不同的项目中使用这个API时,我在type中得到了不同的值,所以我需要创建一个新的enum,并将其强制馈送到Block
我需要重写这个接口,使它的type参数具有完全不同的、不兼容的类型。

declare module 'nice-lib' {
    export enum BlockType {
        article = 'article',
    }

    export interface Block {
        readonly type: BlockType
    }
}

但是,我得到这个错误:
“Block”的所有声明必须具有相同的类型参数。
有道理,但我需要撤销它。怎么做?

dgsult0t

dgsult0t1#

您正在尝试更改type属性的类型,这是不允许的,因为Block接口被定义为只读,这意味着它不能被修改。
解决此问题的一种方法是在您自己的项目中创建一个新接口,该接口扩展Block接口,但type属性具有不同的类型。使用extends关键字并为type属性提供新类型。例如:

import { Block, BlockType } from 'nice-lib'; 

    export enum MyBlockType {
    article = 'article',
    }

    export interface MyBlock extends Block {
    readonly type: MyBlockType;
    }

这将创建一个新接口MyBlock,它扩展了Block接口,但type属性具有不同的类型。然后,您可以在自己的代码中使用MyBlock接口,并且type属性的类型将为MyBlockType而不是BlockType。

相关问题