如果我有这样的类型:

type T = {
  a: string,
  _a: string,
  b: number,
  _c: boolean,
  /* ... any number of unknown properties ... */
};

有没有什么办法可以定义一个新的映射类型,它具有所有(且只有)不以字母_开头的属性T

例如,我想将上面的类型解析为{ a: string, b: number }.

推荐答案

可以,您可以只使用the Omit<T, K> utility type,其中省略的密钥类型是pattern 101 `_${string}`:

type FilteredT = Omit<T, `_${string}`>;
/* type FilteredT = {
    a: string;
    b: number;
} */

模式模板文字类型是在microsoft/TypeScript#40598中实现的(但我没有看到任何手册或发行说明文档).类型`_${string}`可以被读作"后跟任何字符串的下划线字符";即,"以下划线开头的任何字符串".

Playground link to code

Typescript相关问答推荐

如何使用属性作为具有Generics的TypScript类中的类型守护?

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

React typescribe Jest调用函数

带占位符的模板文字类型何时扩展另一个?

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

如何在react组件中使用doctype和html标签?

类型推断对React.ForwardRef()的引用参数无效

在TypeScript中扩展重载方法时出现问题

我可以使用typeof来强制执行某些字符串吗

将超类型断言为类型脚本中的泛型参数

基于未定义属性的条件属性

Typescript将键数组映射到属性数组

如何定义这样一个TypeScript泛型,遍历路由配置树并累积路径

如何从上传文件中删除预览文件图标?

在Thunk中间件中输入额外参数时Redux工具包的打字脚本错误

在Google授权后由客户端接收令牌

在打印脚本中将对象类型转换为数组

使用泛型以自引用方式静态键入记录的键

React HashRouter,单击导航栏时页面重新加载出现问题

在Typescript 中,是否有一种方法来定义一个类型,其中该类型是字符串子集的所有可能组合?