如何在TypeScript中为类使用Partial工具类型?
类无法继承
Partial<T>的原因及接口与类的差异 在TypeScript里,接口可以通过继承Partial<T>快速把目标接口的所有属性转为可选:
interface A { name: string; } interface B extends Partial<A> {}
这时B.name会变成可选属性,类型为string | undefined。
但要是尝试让类继承Partial<T>,就会直接报错:
class A { name: string; } class B extends Partial<A> {}
错误提示:
'Partial' only refers to a type, but is being used as a value here
核心原因
Partial<T>是TypeScript的类型工具,只存在于编译阶段的类型系统中,编译成JavaScript后就会被剔除,不属于能在运行时存在的实体。- 类继承要求继承的是一个可实例化的构造函数(也就是类本身),而不是单纯的类型。接口继承仅涉及类型层面的合并,不需要依赖运行时的具体值,所以可以正常使用
Partial<T>。
类的替代实现方式
如果想让类拥有类似Partial<T>的可选属性效果,可以先基于类的类型生成可选接口,再让类实现该接口:
class A { name: string; } // 基于类A的类型创建可选接口 type PartialA = Partial<A>; // 类B实现这个可选接口 class B implements PartialA { name?: string; }
注意:本文讨论的并非C#等其他语言中的Partial类概念。
内容的提问来源于stack exchange,提问作者Sherif eldeeb
相关产品推荐
相关产品推荐

