typescript - 通过组合接口来创建一个带有区分字段的类型?
问题描述
通过组合接口来创建一个带有区分字段的类型?
这是我的代码:
/*
* Missing changeFn indicates delete
*/
type IChangeRequestPromiseProxy<TEntity extends IBaseEntity> =
| IUpdateRequestPromiseProxy<TEntity>
| IDeleteRequestPromiseProxy;
interface IUpdateRequestPromiseProxy<TEntity extends IBaseEntity> {
id: Id;
resolve(value: IPersistence<TEntity>): void;
reject(reason: any): void;
changeFn(entity: TEntity): IPersistence<TEntity>;
}
interface IDeleteRequestPromiseProxy {
id: Id;
resolve(value: void): void;
reject(reason: any): void;
changeFn(entity: never): never;
}
let promiseProxy: IChangeRequestPromiseProxy<TEntity> = { id, resolve, reject };
这是我得到的错误。要点似乎是Property 'changeFn' is missing in type
:
让 promiseProxy: IChangeRequestPromiseProxy Type '{ id: string; 解决:(值?:IPersistence | PromiseLike> | undefined)=> void;拒绝:(原因?:任何)=> 无效;}' 不可分配给类型 'IChangeRequestPromiseProxy'。'{ id: string; 类型中缺少属性 'changeFn' 解决:(值?:IPersistence | PromiseLike> | undefined)=> void;拒绝:(原因?:任何)=> 无效;}' 但在 'IUpdateRequestPromiseProxy'.ts(2322) Queue.service.ts(16, 5) 类型中是必需的:此处声明了 'changeFn'。
为什么这不起作用?
解决方案
changeFn(entity: never): never;
不会使该属性成为changeFn
可选的。要使其成为可选,您可以使用声明它,?
并且由于您实际上不需要任何值,因此它应该是类型undefined
从您的问题中添加缺少的类型,它看起来像:
type IChangeRequestPromiseProxy<TEntity extends IBaseEntity> =
| IUpdateRequestPromiseProxy<TEntity>
| IDeleteRequestPromiseProxy;
interface IUpdateRequestPromiseProxy<TEntity extends IBaseEntity> {
id: Id;
resolve(value: IPersistence<TEntity>): void;
reject(reason: any): void;
changeFn(entity: TEntity): IPersistence<TEntity>;
}
interface IDeleteRequestPromiseProxy {
id: Id;
resolve(value: void): void;
reject(reason: any): void;
changeFn?:undefined;
}
interface IBaseEntity {}
class Entity { }
interface IPersistence<T> { o: T}
type Id = string;
declare const id: string;
declare const resolve: (value: void) => void;
declare const reject: (value: any) => void;
let promiseProxy: IChangeRequestPromiseProxy<Entity> = { id, resolve, reject };
推荐阅读
- assembly - ascii char 到 char 转换程序集 x86?
- javascript - MVC5 @Html.EditorFor:第二个属性问题
- node.js - 如何确定当前操作系统是否为带有 Node.js 的 Window 7
- excel - 匹配 Excel 中的值并计算公式
- javascript - 在 node.js 中排队承诺的数组
- java - Firestore 更新 2 个不同的文档
- ruby-on-rails - 更新到 Rails 5.2 后 Postgres 创建不起作用
- angular - Angular:ngClass条件停止工作
- javascript - 从 Object.keys 获取返回值
- c# - 我正在尝试解析由 C# 中的逗号分隔的文本文件