Używam TypeScript wersja 2.3.4. Chcę napisać funkcję, która akceptuje obiekt, który musi mieć określone pola. Ale ten obiekt nie powinien zawierać żadnych innych pól. Jak mogę to osiągnąć?TypScript ścisła klasa/interfejs
Teraz działa to tylko wtedy, gdy definiuję obiekt w linii. Ale jeśli użyję innego obiektu z dodatkowymi polami - pozwoli na to kompilator. Co jest całkowicie nie tak.
przykład:
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 !!!
sam kod może być writed interfejsy, klasy zgłoszeń typu - to ten sam problem.
Teraz muszę wyodrębnić pola z obiektu ręcznie, aby upewnić się, że nie ma żadnych dodatkowych pól. Ale nie mogę rozpowszechniać tego rozwiązania na ~ 1000 funkcjach (naprawdę tego potrzebuję) w całym kodzie - jest zbyt brudny. Tworzę wrapper API i muszę się upewnić, że nie ma żadnych dodatkowych lub błędnych pól przekazanych do serwera.
Wygląda na to, że jest celowy. Zobacz [ten problem] (https://github.com/Microsoft/TypeScript/issues/13444) i [this] (https://github.com/Microsoft/TypeScript/issues/3755) w celu dodatkowej dyskusji. – Saravana
Saravana, tak, czytam to, ale nie ma odpowiedzi na moje pytanie w tych dyskusjach. Myślę, że lepiej będzie unikać ścisłości interfejsów, ale zostawić to na zajęcia. –