2015-07-24 19 views
10

Thỉnh thoảng, tôi nhận được lỗi TSLint "chặn trống". Điều này xảy ra, ví dụ: khi tôi chuyển một cuộc gọi lại không có chức năng đến một chức năng:Tại sao TSLint và JSLint báo cáo các khối trống?

doSomething(() => {}); 

Từ những gì tôi đọc, JSLint dường như không thay đổi, nhưng tôi đã không xác minh điều đó.

Tôi thấy các tập quán này hoàn toàn hợp lệ, vì vậy tôi đã cố gắng tìm lý do tại sao các khối trống được xem là xấu. Nhưng điều duy nhất tôi có thể tìm thấy (ví dụ: this answer) là hướng dẫn để thêm return; để tránh lỗi. Đây là không phải những gì tôi muốn làm trong mọi cuộc gọi lại trống.

Tại sao TSLint báo cáo ở trên khối trống là sự cố? Có lý do nào khiến tôi không nên vô hiệu hóa séc không?

+0

Không bao giờ được sử dụng; chỉ cần suy nghĩ to: có thể nào là thời gian mà TSLint phàn nàn là khi nó nghĩ hàm _should_ trả về một giá trị và hàm no-op của bạn không làm như vậy? Bạn có lẽ có thể định nghĩa một hàm no-op rõ ràng và chỉ cần chuyển tên của nó trong kiểu gọi này. – TripeHound

+0

@TripeHound Không, TSLint than phiền ngay cả khi tôi chỉ định một loại rõ ràng của '(() => void)' cho cuộc gọi lại. Về noop: Tôi chỉ phát hiện ra rằng lodash đã định nghĩa một: '_.noop'.Đây là giải pháp sạch nhất ... – theDmi

+0

Bạn cũng có thể bọc '{}' trong dấu ngoặc đơn, ví dụ: '() => ({})' không gây ra cảnh báo "khối trống" với TSLint – danwellman

Trả lời

21

Tại sao báo cáo TSLint trên khối rỗng như vấn đề

Để ngăn chặn sai lầm. Có lẽ chức năng đã bị lãng quên để được lấp đầy. Đề xuất () => undefined làm vòng đệm.

More

Nếu bạn muốn vô hiệu hóa nó chỉ cần thêm "no-empty": false, để bạn tslint.json (disable toàn cầu) hoặc vô hiệu hóa nó inline sử dụng một bình luận /* tslint:disable:no-empty */.

+0

Tôi đoán tôi không muốn TSLint nói với tôi rằng tôi đã bỏ lỡ việc điền vào một hàm chức năng, đó là những gì tôi có thử nghiệm. Vì vậy, nếu có thực sự không có gì khác mà kiểm tra này là hữu ích cho, tôi thay vì vô hiệu hóa nó hơn bằng cách sử dụng '() => undefined' trong mỗi đơn gọi lại. Nhưng đó là một vấn đề của hương vị tôi cho là. – theDmi

+0

Chỉ cần làm rõ, bạn có thể chỉ định chính xác ý nghĩa của "sai lầm"? Nó chỉ là cơ thể chức năng trống rỗng? – theDmi

+0

Như Basarat đã nói, một sai lầm có thể là bạn quên thực hiện một cái gì đó, mặc dù thông thường mọi chức năng bạn muốn yo thực hiện một ngày nào đó sẽ ném 'NotImplemented' khi được sử dụng. – MikeSW

10

Như với tất cả các kiểm tra, bạn có quyết định cuối cùng về việc liệu họ có giúp bạn hay không. Bạn có thể tắt kiểm tra TSLint này bằng một trong các tùy chọn sau.

Vô hiệu hóa các quy tắc trong tslint.json

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

Vô hiệu hóa các quy tắc trong file:

/* tslint:disable:no-empty */ 

Bạn luôn có thể chuyển nó trở lại một lần nữa nếu lúc nào đó trong tương lai bạn tìm thấy một khối rỗng đã gây ra cho bạn một vấn đề.

+1

Đây phải là câu trả lời được chấp nhận. – sss4r

0

Nếu bạn cảm thấy bạn không muốn sử dụng gọi lại trong tình huống nhất định bạn có thể thay đổi mã

từ

doSomething(() => {}); 

để

doSomething(() => void); 

Thay() => {} để điều này ngụ ý bạn không quan tâm đến việc gọi lại này. và cách sắp xếp rõ ràng sẽ tránh được các tác động.

Chúc may mắn.

Các vấn đề liên quan