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?
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?
Alle Felder in JavaScript (und in TypeScript) können den Wert null
oder undefined
haben.
Sie können das Feld optional machen, was sich von nullable unterscheidet.
interface Employee1 {
name: string;
salary: number;
}
var a: Employee1 = { name: 'Bob', salary: 40000 }; // OK
var b: Employee1 = { name: 'Bob' }; // Nicht OK, Sie müssen 'salary' haben
var c: Employee1 = { name: 'Bob', salary: undefined }; // OK
var d: Employee1 = { name: null, salary: undefined }; // OK
// OK
class SomeEmployeeA implements Employee1 {
public name = 'Bob';
public salary = 40000;
}
// Nicht OK: Muss 'salary' haben
class SomeEmployeeB implements Employee1 {
public name: string;
}
Vergleichen Sie mit:
interface Employee2 {
name: string;
salary?: number;
}
var a: Employee2 = { name: 'Bob', salary: 40000 }; // OK
var b: Employee2 = { name: 'Bob' }; // OK
var c: Employee2 = { name: 'Bob', salary: undefined }; // OK
var d: Employee2 = { name: null, salary: 'bob' }; // Nicht OK, Gehalt muss eine Nummer sein
// OK, ergibt aber nicht wirklich Sinn
class SomeEmployeeA implements Employee2 {
public name = 'Bob';
}
Um mehr wie C# zu sein, definieren Sie den Nullable
Typ so:
type Nullable = T | null;
interface Employee{
id: number;
name: string;
salary: Nullable;
}
Bonus:
Um Nullable
so zu machen, dass es sich wie ein eingebauter Typescript-Typ verhält, definieren Sie es in einer global.d.ts
Definitionsdatei im Stammquellordner. Dieser Pfad hat bei mir funktioniert: /src/global.d.ts
Union-Typ ist meiner Meinung nach die beste Option in diesem Fall:
interface Employee{
id: number;
name: string;
salary: number | null;
}
// Beide Fälle sind gültig
let employe1: Employee = { id: 1, name: 'John', salary: 100 };
let employe2: Employee = { id: 1, name: 'John', salary: null };
BEARBEITEN: Damit dies wie erwartet funktioniert, sollten Sie strictNullChecks
in tsconfig
aktivieren.
Sie können einfach einen benutzerdefinierten Typ wie den folgenden implementieren:
type Nullable = T | undefined | null;
var foo: Nullable = 10; // ok
var bar: Nullable = true; // Der Typ "true" ist nicht vom Typ "Nullable" zuweisbar
var baz: Nullable = null; // ok
var arr1: Nullable> = [1,2]; // ok
var obj: Nullable = {}; // ok
// Der Typ 'number[]' ist nicht vom Typ 'string[]' zuweisbar.
// Der Typ 'number' ist nicht vom Typ 'string' zuweisbar
var arr2: Nullable> = [1,2];
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.