我有一个对象,我希望显式键入该对象以捕获类型错误:

const hierarchy: HierarchyTree = {
   app: {
      events: {},
   },
   contact: {
   },
}

到目前为止还不错,但我也希望能够推断出来,这样使用一个帮助器给我所有的路径抓取 keys 仍然可以工作(例如Helper<typeof hierarchy> --> ["app"] | ["app", "events"] | ["contact"].

目前,我有一个或显式类型将 destruct 推理,如果没有,我将失go 对象本身的类型安全.我能两者兼得吗?

推荐答案

您可以使用the satisfies operator,而不是使用type annotation显式键入变量,或者只使用推理而不进行任何类型的判断.例如,假设HierarchyTree看起来像

interface HierarchyTree {
  [k: string]: HierarchyTree;
}

您可以这样写:

const hierarchy = {
  app: {
    events: {},
  },
  contact: {
  },
} satisfies HierarchyTree;

type MyHierarchy = typeof hierarchy
/* type MyHierarchy = {
    app: {
        events: {};
    };
    contact: {};
} */

这就保留了hierarchy的类型,足以让任何实用程序类型获取您需要的信息.它还与HierarchyTree进行了核对.如果您犯了错误,则会出现编译器错误:

const badHierarchy = {
  app: 123 // error! Type 'number' is not assignable to type 'HierarchyTree'
} satisfies HierarchyTree;

Playground link to code

Typescript相关问答推荐

React-Native运行方法通过监听另一个状态来更新一个状态

从typescript中的对象数组中获取对象的值作为类型'

打字脚本中泛型和直接类型重新映射的不同行为

类型脚本`Return;`vs`Return unfined;`

向NextAuth会话添加除名称、图像和ID之外的更多详细信息

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

有没有可能产生输出T,它在视觉上省略了T中的一些键?

垫表页脚角v15

在保留类型的同时进行深层键名转换

TypeScrip:强制使用动态密钥

垫子工具栏不起作用的Angular 布线

递归生成常量树形 struct 的键控类型

基于闭包类型缩小泛型类型脚本函数的范围

有没有一种方法可以防止我的组件包在其中安装样式组件'; node 模块中的s目录

在对象数组中设置值

如何限定索引值必须与相应属性的id字段相同

显式推断对象为只读

Next.JS-13(应用程序路由)中发现无效的中间件

Typescript,如何从对象的对象中获取分离的类型

TypeScript 中的通用函数包装和类型推断