583 Stimmen

Typdefinition im Objektliteral in TypeScript

In TypeScript-Klassen ist es zum Beispiel möglich, Typen für Eigenschaften zu deklarieren:

class className {
  property: string;
};

Wie deklariert man den Typ einer Eigenschaft in einem Objektliteral?

Ich habe den folgenden Code ausprobiert, aber er lässt sich nicht kompilieren:

var obj = {
  property: string;
};

Ich erhalte die folgende Fehlermeldung:

Der Name 'string' existiert nicht im aktuellen Bereich

Mache ich etwas falsch oder ist das ein Fehler?

16voto

Egor Punkte 409

Wenn Sie versuchen, Typisierungen zu einer destrukturiert Objektliteral, z. B. in Argumenten für eine Funktion, lautet die Syntax:

function foo({ bar, baz }: { bar: boolean, baz: string }) {
  // ...
}

foo({ bar: true, baz: 'lorem ipsum' });

10voto

mukund patel Punkte 1041

Wenn wir in TypeScript ein Objekt deklarieren, verwenden wir die folgende Syntax:

[access modifier] variable name : { /* structure of object */ }

Zum Beispiel:

private Object:{ Key1: string, Key2: number }

8voto

Vlad Punkte 645

Vorsicht! Es mag für einige offensichtlich erscheinen, aber die Typdeklaration:

const foo: TypeName = {}

ist nicht dasselbe wie das Gießen mit as :

const foo = {} as TypeName

trotz der vorgeschlagenen

E

T

const foo: { [K in 'open' | 'closed']: string } = {}
// ERROR: TS2739: Type '{}' is missing the following properties from type '{ open: string; closed: string; }': open, closed

G

const foo = {} as { [K in 'open' | 'closed']: string }
// No error

7voto

Ray Foss Punkte 3127

Das ist es, was ich 2021 mit TypeScript 4.5 mache:

const sm = {
  reg: {} as ServiceWorkerRegistration,
  quantum: null as number | null,
  currentCacheName: '' as string, // superfluous
  badSWTimer: 0 as number, // superfluous
}

Dies ist nicht nur ein Wert-Cast, sondern funktioniert genauso wie eine Schnittstellendefinition, d. h. für die Objekteigenschaften.

Aktualisierung: Ich habe zwei überflüssige Schreibweisen als Beispiel hinzugefügt. Das heißt, diese Typisierungen können automatisch abgeleitet werden und würden daher keine Compilerfehler erzeugen.

Quelle: 4.4 Spielplatz

6voto

Hamza Ibrahim Punkte 61
// Use ..

const Per = {
  name: 'HAMZA',
  age: 20,
  coords: {
    tele: '09',
    lan: '190'
  },
  setAge(age: Number): void {
    this.age = age;
  },
  getAge(): Number {
    return age;
  }
};
const { age, name }: { age: Number; name: String } = Per;
const {
  coords: { tele, lan }
}: { coords: { tele: String; lan: String } } = Per;

console.log(Per.getAge());

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