Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 对象可能未定义,但它';那不是。。。? 类型元数据={ 标签?:设置; }; 常量元数据:元数据={ 标记:new Set(), }; metadata.tags.add('test');//_Typescript - Fatal编程技术网

Typescript 对象可能未定义,但它';那不是。。。? 类型元数据={ 标签?:设置; }; 常量元数据:元数据={ 标记:new Set(), }; metadata.tags.add('test');//

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) 因

当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');

当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');