Dattiloscritto: significato di? e ! nelle proprietà della classe

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

Qualcuno può spiegare questo codice? Non ho capito perché hanno aggiunto il "?" marchio. e alcuni di loro hanno "!" invece del punto interrogativo. Cosa vogliono dire?

Risposte

2 Evert Aug 18 2020 at 01:49

Questa è davvero una domanda di Typescript, non TypeORM.

Quando definisci una proprietà come questa:

type Foo = {
  prop1?: number
}

Stai dicendo che prop1è facoltativo.

Quando una proprietà è preceduta da !esso significa che stai dicendo a Typescript di non avvisarti che non l'hai inizializzato nel costruttore (di cui normalmente si lamenterà in modalità rigorosa).

Esempio:

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

}

Va notato che il c!caso nella classe sopra è davvero un modo per dire a Typescript: "So cosa sto facendo, so che lo sto impostando da qualche parte, ma non nel costruttore. Per favore non lamentarti".

Questo non è lo stesso del d?caso, perché questo significa solo che dè consentito essere un number o undefined .