468 Stimmen

Wie deklariere ich einen Typ als nullable in TypeScript?

Ich habe eine Schnittstelle in TypeScript.

interface Employee{
    id: number;
    name: string;
    salary: number | null;
}

Ich möchte das salary als ein optionales Feld machen (Wie wir es in C# machen können). Ist das in TypeScript möglich?

27voto

Ritwik Punkte 1379
type MeineProps = {
  workoutType: string | null;
};

12voto

Yilmaz Punkte 12859
type Nullable = {
  [P in keyof T]: T[P] | null;
};

und dann kannst du es verwenden

Nullable

Auf diese Weise kannst du die Mitarbeiter-Schnittstelle weiterhin verwenden, wie sie anderswo definiert ist

7voto

Margaux Punkte 119

Der nullable Typ kann Laufzeitfehler aufrufen. Deshalb ist es ratsam, die Compiler-Option --strictNullChecks zu verwenden und number | null als Typ zu deklarieren. Auch im Falle einer verschachtelten Funktion, auch wenn der Eingabetyp null ist, kann der Compiler nicht wissen, was es zerstören könnte. Daher empfehle ich, das Ausrufezeichen ! zu verwenden.

function broken(name: string | null): string {
  function postfix(epithet: string) {
    return name.charAt(0) + '.  the ' + epithet; // Fehler, 'name' ist möglicherweise null
  }
  name = name || "Bob";
  return postfix("great");
}

function fixed(name: string | null): string {
  function postfix(epithet: string) {
    return name!.charAt(0) + '.  the ' + epithet; // ok
  }
  name = name || "Bob";
  return postfix("great");
}

Referenz. https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-type-assertions

5voto

Shura Punkte 407
typ MitNullableFeldern = {
  [K in keyof T]: K erweitert Felder 
    ? T[K] | null | undefined
    : T[K]
}

let mitNullableGehalt: MitNullableFeldern = {
  id: 1,
  name: "John",
  gehalt: null
}

Oder Sie können strictNullChecks ausschalten ;)

Und die umgekehrte Version:

typ MitNichtNullableFeldern = {
  [K in keyof T]: K erweitert Felder
    ? NonNullable
    : T[K]
}

3voto

Kayes Punkte 55

Ich habe dieses Problem gelöst, indem ich die Datei tsconfig.json bearbeitet habe.

Unter: "strict": true, füge diese 2 Zeilen hinzu:

"noImplicitAny": false,
"strictNullChecks": false,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X