Typdefinition in Objektliteral in Typoskript

stimmen
158

In Typoskript in der Klasse ist es möglich, Typen für Immobilien, zum Beispiel zu erklären:

class className{
    property : string;
};

Wie soll ich Code schreiben Typen für Immobilien in Objektliteral zu erklären? Solche Code nicht kompilieren:

var obj = {
    property: string;
};

(Ich bin immer Fehler - Der Name ‚string‘ existiert nicht im aktuellen Bereich).

Was ich tue, falsch, oder es ist ein Fehler?

Veröffentlicht am 08/10/2012 um 19:58
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
226

Sie sind ziemlich nah, man muss nur das ersetzen =mit ein :. Sie können einen Objekttyp wörtlichen (siehe spec Abschnitt 3.5.3) oder eine Schnittstelle verwenden. Einen Objekttyp wörtliche Mit der Nähe zu dem, was Sie haben:

var obj: { property: string; } = { property: "foo" };

Sie können aber auch eine Schnittstelle verwenden

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Beantwortet am 08/10/2012 um 20:08
quelle vom benutzer

stimmen
131

Verwenden des Guss Bediener diese succinct zu machen (durch null auf die gewünschte Art Guss).

var obj = {
    property: <string> null
};

Ein längeres Beispiel:

var call = {
    hasStarted: <boolean> null,
    hasFinished: <boolean> null,
    id: <number> null,
};

Das ist viel besser als zwei Teile aufweisen (eine Art zu erklären, die zweite Standardwerte zu erklären):

var callVerbose: {
    hasStarted: boolean;
    hasFinished: boolean;
    id: number;
} = {
    hasStarted: null,
    hasFinished: null,
    id: null,
};

Update 2016.02.10 - To Handle TSX (Danke @ Josh)

Verwenden Sie die als Operator für TSX.

var obj = {
    property: null as string
};

Ein längeres Beispiel:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Beantwortet am 11/10/2012 um 05:50
quelle vom benutzer

stimmen
8

Wenn Sie versuchen, eine Art Anmerkung zu schreiben, ist die Syntax:

var x: { property: string; } = ...;

Wenn Sie versuchen, ein Objektliteral zu schreiben, ist die Syntax:

var x = { property: 'hello' };

Ihr Code versucht, einen Typnamen in einer Werteposition zu verwenden.

Beantwortet am 08/10/2012 um 20:08
quelle vom benutzer

stimmen
4

In Typoskript, wenn wir erklären Objekt dann

[Zugriffsmodifikator] Variablenname: {// Struktur des Objekts}

private Object:{Key1:string , Key2:number }
Beantwortet am 08/01/2017 um 15:05
quelle vom benutzer

stimmen
0
// 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());
Beantwortet am 02/10/2019 um 18:56
quelle vom benutzer

stimmen
0

In Ihrem Code:

var obj = {
  myProp: string;
};

Sie erstellen tatsächlich ein Objektliteral und den Variablenstring in der Eigenschaft MyProp zuweisen. Obwohl sehr schlechte Praxis tatsächlich dieser gültigen TS-Code sein würde (nicht verwenden!):

var string = 'A string';

var obj = {
  property: string
};

was Sie wollen jedoch ist, dass die Objektliteral eingegeben wird. Dies kann auf verschiedene Weise erreicht werden:

Schnittstelle:

interface myObj {
    property: string;
}

var obj: myObj = { property: "My string" };

Benutzerdefinierte Typ:

type myObjType = {
    property: string
};

var obj: myObjType = { property: "My string" };

Cast-Operator:

var obj = {
    myString: <string> 'hi',
    myNumber: <number> 132,
};

Objekttyp wörtliche:

var obj: { property: string; } = { property: "Mystring" };
Beantwortet am 05/08/2019 um 12:06
quelle vom benutzer

stimmen
0

Ich bin überrascht , dass niemand die dies erwähnt , aber man konnte nur eine einzige Schnittstelle namens erstellen ObjectLiteral, wie folgt aus :

interface ObjectLiteral {
  [key: string]: any;
}

Dann würden Sie es wie folgt verwenden:

let data: ObjectLiteral = {
  hello: "world",
  goodbye: 1,
  // ...
};

Sie könnten diese einzige Schnittstelle oft wiederverwenden, wie Sie möchten.

Viel Glück.

Beantwortet am 20/05/2019 um 11:56
quelle vom benutzer

stimmen
0

Wenn Sie versuchen , Typisierungen zu einem hinzufügen destructured Objektliteral, zum Beispiel in Argumenten zu einer Funktion, ist die Syntax:

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

foo({ bar: true, baz: 'lorem ipsum' });
Beantwortet am 07/03/2019 um 01:22
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more