Typescript 对象可能未定义,但它';那不是。。。? 类型元数据={ 标签?:设置; }; 常量元数据:元数据={ 标记:new Set(), }; metadata.tags.add('test');//
当TypeScript评估您的类型时,它会一行一行地记录您的代码,并在执行过程中缩小变量的类型 如果您使用:Typescript 对象可能未定义,但它';那不是。。。? 类型元数据={ 标签?:设置; }; 常量元数据:元数据={ 标记:new Set(), }; metadata.tags.add('test');//,typescript,Typescript,当TypeScript评估您的类型时,它会一行一行地记录您的代码,并在执行过程中缩小变量的类型 如果您使用: type Metadata = { tags?: Set<string>; }; const metadata: Metadata = { tags: new Set<string>(), }; metadata.tags.add('test'); // <-- Object is possibly 'undefined'.ts(2532) 因
type Metadata = {
tags?: Set<string>;
};
const metadata: Metadata = {
tags: new Set<string>(),
};
metadata.tags.add('test'); // <-- Object is possibly 'undefined'.ts(2532)
因此,当TypeScript检查这一行时,元数据
是一个元数据
对象,其中标记
属性是可选的:
const metadata: Metadata = {
tags: new Set<string>(),
};
因为您知道您刚刚设置了这个属性,所以可以使用
键入断言,表示“此值不是未定义的
或空的
”
如果您计划初始化元数据
中的每个属性,可以使用必需的
实用程序类型将类型更改为“此对象遵循元数据
的形状,但每个属性都是必需的”:
metadata.tags!.add('test');
当TypeScript评估您的类型时,它会一行一行地记录您的代码,并在执行过程中缩小变量的类型 如果您使用:
type Metadata = {
tags?: Set<string>;
};
const metadata: Metadata = {
tags: new Set<string>(),
};
metadata.tags.add('test'); // <-- Object is possibly 'undefined'.ts(2532)
因此,当TypeScript检查这一行时,元数据
是一个元数据
对象,其中标记
属性是可选的:
const metadata: Metadata = {
tags: new Set<string>(),
};
因为您知道您刚刚设置了这个属性,所以可以使用
键入断言,表示“此值不是未定义的
或空的
”
如果您计划初始化元数据
中的每个属性,可以使用必需的
实用程序类型将类型更改为“此对象遵循元数据
的形状,但每个属性都是必需的”:
metadata.tags!.add('test');
您断言其类型为
元数据
,其类型将标记
作为可选项。如果您不想这样做,只需完全删除那里的类型表示法const metadata={
您断言它的类型是metadata
,其类型有标记作为可选。如果您不想这样做,只需完全删除那里的类型标记?const metadata={
是的,有道理。我希望通过专门设置标记
,可以将类型推断为元数据&{tags:Set}
。编译器似乎足够聪明,可以解决这个问题——也许在将来!谢谢。是的,这是有意义的。我希望通过专门设置标记
,可以将类型推断为元数据&{tags:Set}
。编译器似乎足够聪明,可以解决这个问题——也许在将来!谢谢。
const metadata: Required<Metadata> = {
tags: new Set<string>(),
};
metadata.tags.add('test');