Nhảy tới nội dung

noImplicitAny

noImplicitAny là compiler option cấm any type ngầm định.

  • Mặc định: true nếu strict được bật, ngược lại là false
  • Phiên bản thêm vào: -
  • TypeScript khuyến nghị nên bật

Vấn đề của any ngầm định

Khi không có type annotation và không thể type inference, TypeScript sẽ đặt type của biến là any. Điều này được gọi là any ngầm định. Đặc biệt, any ngầm định thường xảy ra ở tham số và property.

Ví dụ xảy ra any ngầm định
ts
function foo(param) {}
(parameter) param: any
 
class Bar {
private prop;
(property) Bar.prop: any
}
Ví dụ xảy ra any ngầm định
ts
function foo(param) {}
(parameter) param: any
 
class Bar {
private prop;
(property) Bar.prop: any
}

Biến có type là any không được type check nên nguy cơ bug tăng cao.

ts
function increment(number) {
console.log(number + 1);
}
increment("1");
"11"
increment(undefined);
NaN
ts
function increment(number) {
console.log(number + 1);
}
increment("1");
"11"
increment(undefined);
NaN

Ngăn chặn any ngầm định với noImplicitAny

Đặt noImplicitAny thành true để tránh biến trở thành any ngầm định. TypeScript sẽ cảnh báo khi phát hiện biến có any ngầm định.

Ví dụ any ngầm định được cảnh báo
ts
function foo(param) {}
Parameter 'param' implicitly has an 'any' type.7006Parameter 'param' implicitly has an 'any' type.
 
class Bar {
private prop;
Member 'prop' implicitly has an 'any' type.7008Member 'prop' implicitly has an 'any' type.
}
Ví dụ any ngầm định được cảnh báo
ts
function foo(param) {}
Parameter 'param' implicitly has an 'any' type.7006Parameter 'param' implicitly has an 'any' type.
 
class Bar {
private prop;
Member 'prop' implicitly has an 'any' type.7008Member 'prop' implicitly has an 'any' type.
}

Type của return value của function

Return value của function trong nhiều trường hợp được infer nên không trở thành any ngầm định. Do đó, ngay cả khi không có type annotation cho return value, noImplicitAny cũng không cảnh báo (đối tượng của noImplicitAny chỉ là "any ngầm định").

ts
function foo() {
function foo(): number
return 1;
}
ts
function foo() {
function foo(): number
return 1;
}
Chia sẻ kiến thức

😢TypeScript đặt type thành any khi không có type annotation HOẶC không thể type inference (any ngầm định)
🙅‍♂️noImplicitAny là compiler option cấm any ngầm định
😊Đặt thành true để cảnh báo any ngầm định
✅Option khuyến nghị nên bật

Từ 『Survival TypeScript』

Đăng nội dung này lên X

Thông tin liên quan

📄️ strict

Bật hàng loạt các option thuộc nhóm strict

📄️ Kiểu any

Kiểu any trong TypeScript là kiểu cho phép gán bất kỳ giá trị nào. Dù là primitive type hay object, bạn có thể gán gì vào cũng không gây lỗi.

📄️ Function declaration

Function declaration là cú pháp để định nghĩa function trong JavaScript.

📄️ Field

Để instance có field trong JavaScript, gán giá trị cho property của object đã instance hóa.