Mecanografiado: significado de? y! en propiedades de clase

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

¿Alguien puede explicar este código? No entendí por qué agregaron el '?' marca. y algunos de ellos tienen '!' en lugar de signo de interrogación. ¿Qué quieren decir?

Respuestas

2 Evert Aug 18 2020 at 01:49

Esta es realmente una pregunta de Typecript, no TypeORM.

Cuando define una propiedad como esta:

type Foo = {
  prop1?: number
}

Dices que prop1es opcional.

Cuando una propiedad está precedida por !, significa que le está diciendo a TypeScript que no le advierta que no la inicializó en el constructor (de lo que normalmente se quejará en modo estricto).

Ejemplo:

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

}

Cabe señalar que el c!caso de la clase anterior es realmente una forma de decirle a Typecript: "Sé lo que estoy haciendo, sé que estoy configurando esto en algún lugar, pero no en el constructor. Por favor, no se queje".

Este no es el mismo d?caso, porque esto solo significa que dse le permite ser un number o undefined .