typescript2.0 - TypeScript stroga klasa/sučelje
Koristim TypeScript verziju 2.3.4. Želim napisati funkciju koja prihvaća objekt koji mora imati određena polja. Ali ovaj objekt ne bi trebao sadržavati nikakva druga polja. Kako to mogu postići?
Ovo sada radi samo ako definiram objekt inline. Ali ako koristim drugi objekt s dodatnim poljima - kompajler će to dopustiti. Što je potpuno pogrešno.
Primjer :
function foo(arg: { a: string }) { // there is tons of fields actually
// ...
}
foo ({a: "qwerty"}); // No Error - ok
foo ({a: "qwerty", b: 123}); // Error - ok
let bar = {
a: "qwerty",
b: 123
};
foo (bar); // No Error - NOT OK !!!
Isti kod se može napisati s interfejsima, klasama, deklaracijama tipova - to je isti problem.
Sada moram ručno izdvojiti polja iz objekta kako bih osigurao da nema dodatnih polja. Ali ne mogu primijeniti ovo rješenje na ~1000 funkcija (ovo mi je stvarno potrebno) po cijelom kodu - previše je neuredno. Stvaram API omotač i moram osigurati da se serveru ne pošalju dodatna ili pogrešna polja.
Odgovor #1
Značajka koju tražite poznata je kao "točni tipovi".
Razmatra se, to jest, nije ni odbijena ni prihvaćena, i rasprava i dalje traje.
Odgovor #2
Necromancing.
Dolazi s TypeScript 2.4:
type foo = {
a:string;
b:number;
opt?:string;
}
function test(obj:foo)
{}
test({ a:"", b:123, e:"produceError"});
I da bi se osiguralo da je to objekt, ako su svi parametri opcionalni:
function test(obj:foo & object)
{}
A ako želite proslijediti ili niz znakova ili neku drugu vrstu objekta:
function test(obj: string | foo & object)
{}
