Obecnie mam definicję typu jako:
interface Param {
title: string;
callback: any;
}
Potrzebuję czegoś takiego:
interface Param {
title: string;
callback: function;
}
ale druga nie jest akceptowana.
javascript
typescript
Smrutiranjan Sahu
źródło
źródło
Function
jak pokazano w pierwszym wierszu tej odpowiedzi, i mówiąc, że() => void
preferowany jest akapit drugi (z użyciem typu lub cokolwiek pasującego do przypadku użycia)?Maszynopis z wersji 1.4 zawiera
type
słowo kluczowe, które deklaruje alias typu (analogicznie jaktypedef
w C / C ++). Możesz zadeklarować swój typ wywołania zwrotnego w ten sposób:która deklaruje funkcję, która nie przyjmuje argumentów i nic nie zwraca. Funkcja, która pobiera zero lub więcej argumentów dowolnego typu i nic nie zwraca:
Możesz na przykład powiedzieć
Jeśli potrzebujesz funkcji, która pobiera dowolną liczbę argumentów i zwraca cokolwiek (w tym void):
Możesz podać niektóre obowiązkowe argumenty, a następnie zestaw dodatkowych argumentów (np. Ciąg, liczbę, a następnie zestaw dodatkowych argumentów) w ten sposób:
Może to być przydatne w przypadku programów obsługi EventEmitter.
W ten sposób można wpisywać funkcje tak mocno, jak chcesz, chociaż możesz dać się ponieść emocjom i napotkać problemy kombinatoryczne, jeśli spróbujesz dopiąć wszystko za pomocą aliasu typu.
źródło
Function
i(...args: any[]) => any
co jest preferowane?...args: any[]
nie jest bardzo przydatne.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
czego szukałem ty.Po odpowiedzi Ryana myślę, że interfejs, którego szukasz, został zdefiniowany w następujący sposób:
źródło
Oto przykład funkcji, która akceptuje wywołanie zwrotne
Jeśli nie zależy Ci na wartościach zwrotnych wywołań zwrotnych (większość ludzi nie wie, jak je wykorzystać w jakikolwiek skuteczny sposób), możesz użyć
void
Uwaga: podpis użyłem dla
callback
parametru ...Powiedziałbym, że jest to niedobór TypeScript, ponieważ oczekuje się, że podamy nazwę parametrów wywołania zwrotnego. W tym przypadku użyłem,
_
ponieważ nie można go użyć wsqk
funkcji.Jeśli jednak to zrobisz
Jest poprawny TypeScript, ale będzie interpretowany jako ...
Tzn. TypeScript pomyśli, że nazwa parametru to
number
i domyślny typ toany
. Oczywiście nie to zamierzaliśmy, ale niestety, tak działa TypeScript.Więc nie zapomnij podać nazw parametrów podczas wpisywania parametrów funkcji ... głupio, jak mogłoby się wydawać.
źródło
Możesz zdefiniować typ funkcji w interfejsie na różne sposoby,
Korzystanie jest bardzo proste,
źródło
Istnieją cztery abstrakcyjne typy funkcji, których można używać osobno, gdy wiadomo, że funkcja pobierze argument (y) lub nie, zwróci dane lub nie.
lubię to:
Aby użyć tylko jednego typu jako dowolnego typu funkcji, możemy połączyć wszystkie typy abstrakcyjne razem, tak jak to:
następnie użyj go w następujący sposób:
W powyższym przykładzie wszystko jest poprawne. Jednak poniższy przykład użycia jest niepoprawny z punktu widzenia większości edytorów kodu.
Prawidłowe połączenie dla redaktorów wygląda następująco:
źródło
Możesz zadeklarować wywołanie zwrotne jako 1) właściwość funkcji lub 2) metodę :
Istnieje istotna różnica w pisaniu od TS 2.6 :
Otrzymujesz silniejsze („dźwiękowe”) typy w trybie
--strict
lub--strictFunctionTypes
, gdy deklarowana jest właściwość funkcji . Weźmy przykład:Technicznie mówiony, metody są bivariant i właściwości funkcyjne kontrawariantny w swoich argumentach poniżej
strictFunctionTypes
. Metody są nadal sprawdzane w sposób bardziej dozwolony (nawet jeśli nie dźwiękowy), aby były nieco bardziej praktyczne w połączeniu z typami wbudowanymi, takimi jakArray
.Podsumowanie
Przykładowy kod placu zabaw
źródło