[Typescript]:如何检查类型(而不是对象)是否具有特定属性?

问题描述 投票:0回答:1

我正在使用一个生成的相当大的复杂类型。我需要通过创建变量并将其所有属性初始化为默认/空值来检查类型上是否存在某些属性,因为这会导致太多工作。

有没有一种方法可以检查属性是否直接存在于类型上,而无需实例化它们或创建具有所有属性的变量并对其进行检查? 前任: 假设我有以下内容

export type Mutations { upsertItem: {}, upsertItemMany: {}, removeItem: {}, removeItemMany: {}, upsertCustomer: {}, upsertCustomerMany: {}, removeCustomer: {}, removeCustomerMany: {}, ... (1000+ more properties exist) }
我尝试做类似的事情:

var mutations: Mutations; Object.hasOwn(mutations, 'upsertItem');
但我得到的只是以下错误:
“无法将未定义或 null 转换为对象”

如果我尝试像这样初始化变量

let mutations: Mutation = {};
我收到一个错误,我需要指定它的所有属性,这违背了目的。

我猜这可以使用反射来解决,但我不知道如何解决。

typescript types properties
1个回答
0
投票
简短的回答是,你不能。

关于 Typescript 需要记住的一件好事是它只是编译时的事情。运行时不会出现任何打字稿内容。这包括

type

 构造。

您正在尝试执行运行时检查,但这是不可能的,因为代码在编译后和运行时根本不知道与打字稿相关的任何信息。这只是简单的 javascript

© www.soinside.com 2019 - 2024. All rights reserved.