2016-08-24 13 views
5

ponieważ nie znaleźli jasnej odpowiedzi w interwebs, usłyszeć idzie moje pytanie:podobne do strukturalnych interfejsy w maszynopisie/JS?

Mam „struct” tak:

struct tTest{ 
    public: 
     char foo [1+1] 
     char bar [64] 
}; 

Czy istnieje sposób, aby zbudować to w TS/JS?

Myślałem pomocą interfejsów jest właściwą drogę:

export interface tTest{ 
    foo: string; 
    bar: string 
} 

Ale nie jest to sposób, aby dodać [64] i [1 + 1] do właściwości, prawda? Byłoby świetnie, gdyby było, ponieważ potrzebuję, aby każdy obiekt typu tTest był tej samej długości i byłoby trudniej sprawdzić długość i dodać, aż ma odpowiednią długość. Czuję, że to byłoby naprawdę brudne.

Wszelkie pomysły/pomoc? Dzięki!

+0

Nie, nie ma nic za to w JS/TS. Ale co próbujesz zrobić? Aby ograniczyć długość strun lub czy powinny mieć stały rozmiar? –

+0

Nie jestem do końca obeznany z tym, co "[1 + 1]" faktycznie zrobiłoby, ale brzmi dla mnie jak właściwa droga do tego w Maszynopisie byłoby zdefiniowanie 'klasy tTest' z' get foo() : metoda string', która zwraca twoją wyściełaną/skróconą wartość. – deceze

+0

'char' nie jest typem w JS ani TS, istnieje tylko łańcuch znaków. Możesz ograniczyć długość łańcuchów lub użyć tablicy liczb całkowitych, w której każda pozycja reprezentuje znak. –

Odpowiedz

6

Jak mówią komentarze: js/ts nie obsługują char typu i nie ma sposobu, aby zadeklarować długość tablicy/łańcucha.

można wymusić za pomocą setter choć:

interface tTest { 
    foo: string; 
} 

class tTestImplementation implements tTest { 
    private _foo: string; 

    get foo(): string { 
     return this._foo; 
    } 

    set foo(value: string) { 
     this._foo = value; 

     while (this._foo.length < 64) { 
      this._foo += " "; 
     } 
    } 
} 

(code in playground)

Musisz posiadać aktualną klasę jako interfejsy brakuje wdrożenia i nie przetrwać proces kompilacji.
Właśnie dodałem spacje, aby uzyskać dokładną długość, ale możesz to zmienić, aby pasowała do twoich potrzeb.

+0

Obawiałem się, że będę musiał to zrobić .. Ale dzięki tobie. – Faigjaz

1

Nie można wymusić długości tablicy w Maszynopisie, ponieważ nie można tego zrobić w javascript.
Powiedzmy mamy TEST.T klasy jak następuje:

class tTest{ 
     foo = new Array<string>(2); 
}; 

Jak widać, mamy zdefiniowane tablicę ciąg o długości 2, z tej składni możemy ograniczyć rodzaj wartości możemy umieścić wewnątrz naszego tablica:

let t = new tTest(); 
console.log('lenght before initialization' + t.foo.length); 

for(var i = 0; i < t.foo.length; i++){ 
    console.log(t.foo[i]); 
} 

t.foo[0] = 'p'; 
t.foo[1] = 'q'; 
//t.foo[2] = 3; // you can't do this 
t.foo[2] = '3'; // but you can do this 

console.log('length after initialization' + t.foo.length); 

for(var i = 0; i < t.foo.length; i++){ 
    console.log(t.foo[i]); 
} 

W ten sposób nie możemy umieścić wartość liczbową wewnątrz swojej tablicy, ale nie możemy ograniczyć liczbę wartości można umieścić wewnątrz.

Playground

+0

Ograniczanie liczby wartości nie odpowiada moim potrzebom. Wygląda na to, że muszę zrobić to, czego nie chcę. Ale dzięki tobie również! – Faigjaz