假设我有一个界面:

interface IUser {
  email: string;
  id: number;
  phone: string;
};

然后我有一个函数,它需要subset(或完全匹配)这样的类型.也许它会通过一个完整的物体,让它在{email: "t@g.com"}秒内通过.我希望类型判断器同时考虑这两种情况.

例子:

function updateUser(user: IUser) {
  // Update a "subset" of user attributes:
  $http.put("/users/update", user);
}

Typescript支持这种行为吗?我发现它非常有用,尤其是对于Redux这样的范例.

澄清一下,目标是:

  1. 避免重新编写接口并手动将所有属性设置为可选.
  2. 避免指定意外属性(例如拼写错误).
  3. 避免使用命令式逻辑,比如if条语句,这样会失go 编译时类型判断的好处.

UPDATE: Typescript已经宣布支持mapped types,一旦发布,应该可以解决这个问题.

推荐答案

Typescript现在支持部分类型.

创建分部类型的正确方法是:

type PartialUser = Partial<IUser>;

Typescript相关问答推荐

为什么当类类型与方法参数类型不兼容时,该函数可以接受类类型

具有匹配键的通用对象界面

在OpenLayers 9.1中使用内置方法时,TypScript缩小联合类型

Typescript如何从字符串中提取多个文本

了解TS类型参数列表中的分配

为什么typescript不能推断类的方法返回类型为泛型''

在Angular中注入多个BrowserModules,但在我的代码中只有一个

与字符串文字模板的结果类型匹配的打字脚本

如何使用函数填充对象?

类型脚本中没有接口的中间静态类

是否存在类型联合的替代方案,其中包括仅在某些替代方案中存在的可选属性?

垫表页脚角v15

如何将父属性类型判断传播到子属性

使用条件类型的类型保护

对象类型的TypeScrip隐式索引签名

如何在脚本中输入具有不同数量的泛型类型变量的函数?

VUE 3类型';字符串';不可分配给类型';参考<;字符串&>

导航链接不触发自定义挂钩

如何在TypeScript中将元组与泛型一起使用?

什么';是并类型A|B的点,其中B是A的子类?