2015-07-24 18 views
10

Od czasu do czasu dostaję błędy TSLint "blok jest pusty". Tak się dzieje np. kiedy mijam zwrotnego no-op do funkcji:Dlaczego TSLint i JSLint zgłaszają puste bloki?

doSomething(() => {}); 

Z tego co czytałem, JSLint najwyraźniej robi to samo, ale nie sprawdzać.

Uważam, że te zwyczaje są całkowicie poprawne, więc próbowałem znaleźć powód, dla którego puste bloki są uważane za złe. Ale jedyną rzeczą, którą mogę znaleźć (np. W this answer) są instrukcje, aby dodać return;, aby uniknąć błędu. To jest nie co chcę zrobić w każdym pustym wywołaniu zwrotnym.

Dlaczego raport TSLint powyżej pustego bloku jest problemem? Czy jest jakikolwiek powód, dla którego nie powinienem wyłączyć kontroli?

+0

Nigdy nie używał; po prostu myśląc głośno: czy to możliwe, że czasy, na które skarży się TSLint, kiedy myśli, że funkcja _nie może_zwrócić wartości, a twoja funkcja "no-op" tego nie robi? Możesz zdefiniować jawną funkcję "no-op" i po prostu przekazać jej nazwę w takim wywołaniu. – TripeHound

+0

@ TripeHound Nie, TSLint narzeka nawet wtedy, gdy określam jawny typ '(() => void) dla wywołania zwrotnego. Odnośnie noopa: właśnie dowiedziałem się, że lody już definiują jedną: '_.noop'.To jest jak dotąd najczystsze rozwiązanie ... – theDmi

+0

Możesz również zawinąć '{} w nawiasach, np. '() => ({})' nie powoduje ostrzeżenia "pustego bloku" z TSLint – danwellman

Odpowiedz

21

Dlaczego raport TSLint nad pustym bloku jako problemu

Aby zapobiec błędy. Być może funkcja została zapomniana. Poleć () => undefined jako odbiór.

Więcej

Jeśli chcesz wyłączyć to po prostu dodać "no-empty": false, aby Twój tslint.json (wyłączyć globalnie) lub wyłączyć go inline za pomocą /* tslint:disable:no-empty */ komentarz.

+0

Chyba nie chcę, aby TSLint powiedział mi, że przegapiłem wypełnianie funkcji, to jest to, do czego mam testy. Więc jeśli naprawdę nie ma nic więcej, dla czego ten test jest przydatny, wolę go wyłączyć niż używając '() => undefined' w każdym pojedynczym wywołaniu zwrotnym. Ale przypuszczam, że to kwestia gustu. – theDmi

+0

Aby wyjaśnić, czy można dokładnie określić, co rozumie się przez "błędy"? Czy to po prostu puste ciało funkcyjne? – theDmi

+0

Podobnie jak powiedział basarat, błędem może być, że zapomniałeś zaimplementować coś, choć zwykle każda funkcja, którą chcesz wdrożyć, powinna kiedyś użyć polecenia "NotImplemented". – MikeSW

10

Podobnie jak w przypadku wszystkich kontroli, masz ostateczną ocenę, czy ci pomagają, czy nie. Możesz wyłączyć ten test TSLint, korzystając z jednej z poniższych opcji.

Wyłącz regułę w tslint.json

//... 
"no-empty": false, 
//... 

Wyłącz regułę w pliku:

/* tslint:disable:no-empty */ 

Zawsze można przełączyć go ponownie, jeśli kiedyś w przyszłości znaleźć pusty blok to spowodowało problem.

+1

To powinna być zaakceptowana odpowiedź. – sss4r

0

Jeśli czujesz, że nie chcesz korzystać zwrotnego podczas niektórych scenariuszach można zmodyfikować kod

z

doSomething(() => {}); 

do

doSomething(() => void); 

stosując() => {}, aby to oznacza, że ​​nie zależy ci na tym oddzwanianiu. i wyraźne typowanie będzie unikać implikacji.

Powodzenia.