Typescript 开始为空但随后添加了属性的对象的类型

Typescript 开始为空但随后添加了属性的对象的类型,typescript,types,type-conversion,Typescript,Types,Type Conversion,目前在我的代码中,我声明了一个空对象: const coverage props={} 然后循环其他一些数据并向对象添加属性。我想为coverageProps变量提供一个类型,但遇到了一些错误。这是我当前尝试键入的方式: type CoveragePropKeys = 'cut' | 'support' | 'coverage'; const coverageProps: Record<CoveragePropKeys, string> = {}; 但是后来在我添加属性的代码中,我

目前在我的代码中,我声明了一个空对象:

const coverage props={}

然后循环其他一些数据并向对象添加属性。我想为
coverageProps
变量提供一个类型,但遇到了一些错误。这是我当前尝试键入的方式:

type CoveragePropKeys = 'cut' | 'support' | 'coverage';
const coverageProps: Record<CoveragePropKeys, string> = {};
但是后来在我添加属性的代码中,我得到了另一个TS错误,因为
coverage props
本质上具有any类型,并且字符串不能用于索引类型{}。我可以解决这个错误,但我不想走这条路,因为我正在丢失类型检查


我对TypeScript相当陌生,仍然在学习最佳实践。处理这种情况的正确方法是什么?

您可以使用
可选运算符执行此操作,并声明所需的类型

type CoveragePropKeys = {cut?: string; support?: string; coverage?: string};
const coverageProps: CoveragePropKeys = {};

coverageProps.cut = 'some value'; //allowed
coverageProps.support = 5; //error property must be string or undefined
您能否展示一个演示如何循环和设置属性的示例?我的猜测是,您必须使用like
constcoverageprops={}as记录
,然后确保在执行任何其他操作之前添加所有必需的属性,因为在初始化对象之前,您一直在对编译器撒谎。据我所知,没有真正方便且完全类型安全的解决方案。
type CoveragePropKeys = {cut?: string; support?: string; coverage?: string};
const coverageProps: CoveragePropKeys = {};

coverageProps.cut = 'some value'; //allowed
coverageProps.support = 5; //error property must be string or undefined