Typographie: signification de? et ! dans les propriétés de classe

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

Quelqu'un peut-il expliquer ce code? Je n'ai pas compris pourquoi ils ont ajouté le "?" marque. et certains d'entre eux ont '!' au lieu d'un point d'interrogation. Que signifient-ils?

Réponses

2 Evert Aug 18 2020 at 01:49

Il s'agit en fait d'une question Typescript, pas de TypeORM.

Lorsque vous définissez une propriété comme celle-ci:

type Foo = {
  prop1?: number
}

Vous dites que prop1c'est facultatif.

Lorsqu'une propriété est précédée, !cela signifie que vous dites à Typescript de ne pas vous avertir que vous ne l'avez pas initialisée dans le constructeur (ce dont il se plaindra normalement en mode strict).

Exemple:

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;
  }

}

Il convient de noter que le c!cas dans la classe ci-dessus est vraiment une façon de dire à Typescript: "Je sais ce que je fais, je sais que je mets cela quelque part, mais pas dans le constructeur. Veuillez ne pas vous plaindre".

Ce n'est pas la même chose que le d?cas, car cela signifie simplement qu'il dest permis d'être un number ou undefined .