如何在TypeScript中创建指定字段值且消除可选成员的子类型?含type实现
实现指定属性类型并移除可选成员的TypeScript类型
一、使用Interface实现
你原代码里的写法存在错误:interface中不能直接给属性赋值(prop1='some real value'是赋值操作,不符合类型定义规则),需要将prop1指定为字面量类型。要消除可选的prop3,可以通过Omit工具类型先移除A中的prop1和prop3,再结合interface定义新类型:
interface A { prop1: string; prop2: boolean; prop3?: boolean; } // 移除A中的prop1和prop3,再定义B的专属属性 interface B extends Omit<A, 'prop1' | 'prop3'> { prop1: 'some real value'; // 指定为具体字面量类型 } // 符合B类型的示例对象 const b: B = { prop1: 'some real value', prop2: true };
如果你的需求是保留prop3但消除其可选性(改为必填),只需在B中重新声明prop3为非可选类型即可:
interface B extends A { prop1: 'some real value'; prop3: boolean; // 覆盖可选属性为必填 }
二、使用Type类型实现
Type别名可以通过交叉类型、工具类型的组合,更灵活地实现需求:
方式1:移除prop3并指定prop1为字面量类型
type A = { prop1: string; prop2: boolean; prop3?: boolean; }; // 交叉"移除指定属性后的A类型"与"自定义prop1类型" type B = Omit<A, 'prop1' | 'prop3'> & { prop1: 'some real value'; }; // 符合B类型的示例对象 const b: B = { prop1: 'some real value', prop2: false };
方式2:将prop3变为必填
如果需要保留prop3但消除其可选性,可通过Required工具类型处理prop3,再交叉自定义的prop1类型:
type B = Omit<A, 'prop1'> & { prop1: 'some real value'; } & Required<Pick<A, 'prop3'>>;
以上两种方式都能让B类型继承A的核心结构,同时满足指定prop1具体值、消除prop3可选性的需求。
内容的提问来源于stack exchange,提问作者nikhil kekan
相关产品推荐
相关产品推荐

