Definicja typu obiektu w dosłowny w maszynopisie

głosy
158

W maszynopisie w klasie jest możliwe zadeklarować typ własności, na przykład:

class className{
    property : string;
};

W jaki sposób należy napisać kod, aby zadeklarować typ własności obiektu w dosłownym? Taki kod nie kompilacji:

var obj = {
    property: string;
};

(Dostaję błąd - nazwa „string” nie istnieje w bieżącym zakresie).

Co robię źle czy jest to błąd?

Utwórz 08/10/2012 o 19:58
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
226

Jesteś bardzo blisko, wystarczy wymienić =z :. Można użyć typu obiektu dosłowne (patrz rozdział 3.5.3 specyfikacji) lub interfejs. Korzystanie typ obiektu dosłowny jest blisko tego, co masz:

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

Ale można też użyć interfejsu

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Odpowiedział 08/10/2012 o 20:08
źródło użytkownik

głosy
131

Za pomocą operatora odlewu, aby to skrótowo (oddając null pożądanego rodzaju).

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

Dłuższy przykład:

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

Jest to o wiele lepsze niż z dwóch części (jeden zadeklarować typy, drugi zadeklarować domyślne):

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

Aktualizacja 10.02.2016 - obchodzić TSX (Dzięki @Josh)

Używać jako operatora dla TSX.

var obj = {
    property: null as string
};

Dłuższy przykład:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Odpowiedział 11/10/2012 o 05:50
źródło użytkownik

głosy
8

Jeśli próbujesz napisać typu adnotacji, składnia jest:

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

Jeśli próbujesz napisać przedmiotu dosłowne, składnia jest:

var x = { property: 'hello' };

Twój kod próbuje użyć nazwy typu w pozycji wartości.

Odpowiedział 08/10/2012 o 20:08
źródło użytkownik

głosy
4

W maszynopisie jeśli deklarują obiekt następnie

[Dostęp do modyfikatora] Nazwa zmiennej {// konstrukcja obiektów}

private Object:{Key1:string , Key2:number }
Odpowiedział 08/01/2017 o 15:05
źródło użytkownik

głosy
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());
Odpowiedział 02/10/2019 o 18:56
źródło użytkownik

głosy
0

W kodzie:

var obj = {
  myProp: string;
};

Jesteś rzeczywiście utworzenie obiektu dosłowny i przypisanie zmiennej ciąg do myProp nieruchomości. Chociaż bardzo złą praktyką byłoby rzeczywiście być prawidłowy kod TS (nie używać tego!):

var string = 'A string';

var obj = {
  property: string
};

Jednak to, co chcesz, jest to, że obiekt jest wpisany dosłowne. Cel ten można osiągnąć na różne sposoby:

Berło:

interface myObj {
    property: string;
}

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

niestandardowy typ:

type myObjType = {
    property: string
};

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

Obsada operator:

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

Obiekt dosłowny:

var obj: { property: string; } = { property: "Mystring" };
Odpowiedział 05/08/2019 o 12:06
źródło użytkownik

głosy
0

Dziwię się, że nikt nie wspominał tego, ale może po prostu utworzyć jeden interfejs o nazwie ObjectLiteral, na przykład:

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

Następnie chcesz go używać, podobnie jak to:

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

Można ponownie wykorzystać ten pojedynczy interfejs tyle razy, ile chcesz.

Powodzenia.

Odpowiedział 20/05/2019 o 11:56
źródło użytkownik

głosy
0

Jeśli chcesz dodać do typowania destrukturyzowanej obiektu dosłownym, na przykład w argumenty do funkcji, składnia jest:

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

foo({ bar: true, baz: 'lorem ipsum' });
Odpowiedział 07/03/2019 o 01:22
źródło użytkownik

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