Nestjs 打字稿:什么意思?还有!类内属性

Nestjs 打字稿:什么意思?还有!类内属性,nestjs,typeorm,Nestjs,Typeorm,有人能解释一下这个代码吗?我不明白他们为什么加上“?”标记。他们中的一些人有“!”而不是问号。 这是什么意思?这是一个真正的打字问题,而不是打字 定义类似以下内容的属性时: 类型Foo={ 项目1:编号 } 您是说prop1是可选的 当属性前面有时这意味着您告诉Typescript不要警告您没有在构造函数中初始化它(在严格模式下它通常会抱怨) 例如: class-Foo{ //Typescript不会抱怨'a',因为我们在构造函数中设置了它 公众a:数字; //Typescript会抱怨'b'

有人能解释一下这个代码吗?我不明白他们为什么加上“?”标记。他们中的一些人有“!”而不是问号。
这是什么意思?

这是一个真正的打字问题,而不是打字

定义类似以下内容的属性时:

类型Foo={
项目1:编号
}
您是说
prop1
是可选的

当属性前面有
这意味着您告诉Typescript不要警告您没有在构造函数中初始化它(在严格模式下它通常会抱怨)

例如:

class-Foo{
//Typescript不会抱怨'a',因为我们在构造函数中设置了它
公众a:数字;
//Typescript会抱怨'b',因为我们忘了。
公共b:数字;
//Typescript不会抱怨'c',因为我们告诉过它不要抱怨。
公共c!:编号;
//Typescript不会抱怨'd',因为它是可选的,并且是
//允许未定义。
公共d?:数字;
构造函数(){
这个a=5;
}
}
应该注意的是,
ccase实际上是告诉Typescript的一种方式:“我知道我在做什么,我知道我在某处设置了这个,只是不在构造函数中。请不要抱怨。”

这与
d?
的情况不同,因为这只意味着
d
可以是
数字
未定义的

@Column({ name: 'device_kind', type: 'int2', nullable: false })
deviceKind?: number;