Typescript: anlamı? ve ! sınıf özelliklerinde

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

Bu kodu kimse açıklayabilir mi? Neden '?' işaret. ve bazılarının '!' soru işareti yerine. Ne demek istiyorlar?

Yanıtlar

2 Evert Aug 18 2020 at 01:49

Bu gerçekten bir Typescript sorusudur, TypeORM değil.

Böyle bir özelliği tanımladığınızda:

type Foo = {
  prop1?: number
}

prop1İsteğe bağlı olduğunu söylüyorsunuz .

Bir özelliğin önünde olduğunda, !Typescript'e onu yapıcıda başlatmadığınız konusunda sizi uyarmamasını söylüyorsunuz (normalde katı modda şikayet eder).

Misal:

class Foo {
  // Typescript does not complain about `a` because we set it in the constructor
  public a: number;

  // Typescript will complain about `b` because we forgot it.
  public b: number;

  // Typescript will not complain about `c` because we told it not to.
  public c!: number;

  // Typescript will not complain about `d` because it's optional and is
  // allowed to be undefined.
  public d?: number;

  constructor() {
    this.a = 5;
  }

}

c!Yukarıdaki sınıftaki durumun, Typescript'i söylemenin gerçekten bir yolu olduğu unutulmamalıdır : "Ne yaptığımı biliyorum, bunu bir yere kurduğumu biliyorum, sadece kurucuda değil. Lütfen şikayet etmeyin".

Bu d?durumla aynı şey değildir , çünkü bu sadece da number veya olmasına izin verildiği anlamına gelir undefined.