Nhảy tới nội dung

useUnknownInCatchVariables

useUnknownInCatchVariables là compiler option xử lý e trong catch(e) bắt exception là unknown type.

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

Giải thích

JavaScript có thể throw bất kỳ giá trị nào làm exception. Do đó giá trị bắt được là any type.

ts
// case 1
try {
throw new Error();
} catch (err) {
var err: any
}
 
// case 2
try {
throw "This is an error!";
} catch (err) {
var err: any
}
 
// case 3
try {
throw undefined;
} catch (err) {
var err: any
}
ts
// case 1
try {
throw new Error();
} catch (err) {
var err: any
}
 
// case 2
try {
throw "This is an error!";
} catch (err) {
var err: any
}
 
// case 3
try {
throw undefined;
} catch (err) {
var err: any
}

Sự hỗn loạn này cuối cùng được sắp xếp trong TypeScript 4.0. Bằng cách ghi rõ unknown type cho giá trị bắt được, có thể đạt được type safe mặc dù không biết type của giá trị bắt được.

ts
// case 1
try {
throw new Error();
} catch (err) {
var err: any
}
 
// case 2
try {
throw "This is an error!";
} catch (err: unknown) {
var err: unknown
}
 
// case 3
try {
throw undefined;
} catch (err: unknown) {
var err: unknown
}
ts
// case 1
try {
throw new Error();
} catch (err) {
var err: any
}
 
// case 2
try {
throw "This is an error!";
} catch (err: unknown) {
var err: unknown
}
 
// case 3
try {
throw undefined;
} catch (err: unknown) {
var err: unknown
}

Option này làm tính năng này luôn được bật. Giá trị exception bắt được sẽ được phân tích là unknown type mà không cần ghi rõ type.

ts
// case 1
try {
throw new Error();
} catch (err) {
var err: unknown
}
 
// case 2
try {
throw "This is an error!";
} catch (err) {
var err: unknown
}
 
// case 3
try {
throw undefined;
} catch (err) {
var err: unknown
}
ts
// case 1
try {
throw new Error();
} catch (err) {
var err: unknown
}
 
// case 2
try {
throw "This is an error!";
} catch (err) {
var err: unknown
}
 
// case 3
try {
throw undefined;
} catch (err) {
var err: unknown
}

Ngoài ra, nếu muốn nới lỏng ràng buộc này, tức muốn là any type thay vì unknown type, hãy ghi rõ any type cho giá trị bắt được.