Definice typu v objektu doslovný na psacím stroji

hlasů
158

Strojopisem ve třídě je možné prohlásit, typ vlastnictví, například:

class className{
    property : string;
};

Jak bych měl psát kód deklarovat typ majetku v objektu doslovné? Takový kód nesestavují:

var obj = {
    property: string;
};

(I am prospěch chyba - název ‚string‘ neexistuje v aktuálním rozsahu).

Co dělám špatně, nebo je to chyba?

Položena 08/10/2012 v 19:58
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
226

Jsi dost blízko, stačí nahradit =s :. Můžete použít typ objektu doslovný (viz spec oddíl 3.5.3) nebo rozhraní. Použití typ objektu doslovný je blízko tomu, co máte:

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

Ale můžete také použít rozhraní

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Odpovězeno 08/10/2012 v 20:08
zdroj uživatelem

hlasů
131

Použít operátor cast, aby se tento krátký (litím null požadovaného typu).

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

Delší příklad:

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

To je mnohem lepší, než ze dvou částí (jedna deklarovat typy, druhý deklarovat výchozí):

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

Aktualizace 02.10.2016 - zacházet TSX (Díky @Josh)

Použít jako operátor pro TSX.

var obj = {
    property: null as string
};

Delší příklad:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Odpovězeno 11/10/2012 v 05:50
zdroj uživatelem

hlasů
8

Pokud se snažíte psát anotaci typu, syntax je:

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

Pokud se snažíte psát objekt doslovný, syntaxe je:

var x = { property: 'hello' };

Váš kód se snaží použít název typu v poloze hodnoty.

Odpovězeno 08/10/2012 v 20:08
zdroj uživatelem

hlasů
4

Na psacím stroji, pokud budeme deklarovat objekt poté

[Přístup modifikátor] název proměnné: {// struktura objektu}

private Object:{Key1:string , Key2:number }
Odpovězeno 08/01/2017 v 15:05
zdroj uživatelem

hlasů
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());
Odpovězeno 02/10/2019 v 18:56
zdroj uživatelem

hlasů
0

V kódu:

var obj = {
  myProp: string;
};

Ty jsou ve skutečnosti vytváří objekt doslovný a přiřazení proměnné řetězec do MyProp majetku. Ačkoli velmi špatné praxe by to být skutečně platný kód TS (nepoužívat to!):

var string = 'A string';

var obj = {
  property: string
};

Avšak to, co chcete, je to, že objekt doslovný zadali. Toho lze dosáhnout různými způsoby:

Rozhraní:

interface myObj {
    property: string;
}

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

Typ Vlastní:

type myObjType = {
    property: string
};

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

Cast operátor:

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

typ objektu doslovný:

var obj: { property: string; } = { property: "Mystring" };
Odpovězeno 05/08/2019 v 12:06
zdroj uživatelem

hlasů
0

Jsem překvapen, že nikdo je to uvedeno, ale můžete jen vytvořit jednotné rozhraní s názvem ObjectLiteral, jako je tento:

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

Pak byste ji používat, například takto:

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

Dalo by se znovu použít tento jediného rozhraní tolikrát, kolikrát budete chtít.

Hodně štěstí.

Odpovězeno 20/05/2019 v 11:56
zdroj uživatelem

hlasů
0

Pokud se snažíte přidat typizací na destrukturalizovaného objektu doslovný, například v argumenty funkce, syntaxe je:

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

foo({ bar: true, baz: 'lorem ipsum' });
Odpovězeno 07/03/2019 v 01:22
zdroj uživatelem

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