NoInfer<T>
NoInfer<T> là utility type để ngăn chặn type inference của T.
Type argument của NoInfer<T>
T
Type argument T nhận kiểu muốn ngăn chặn inference.
Ví dụ sử dụng NoInfer
Trước tiên là ví dụ không sử dụng NoInfer. Định nghĩa function getIndexFromArray sử dụng generics:
tsfunction getIndexFromArray<T extends string>(elements: T[], item: T): number {return elements.findIndex((element) => element === item);}type Fruit = "grape" | "apple" | "banana";const fruits: Fruit[] = ["grape", "apple", "banana"];getIndexFromArray(fruits, "apple");getIndexFromArray(fruits, "peach");
tsfunction getIndexFromArray<T extends string>(elements: T[], item: T): number {return elements.findIndex((element) => element === item);}type Fruit = "grape" | "apple" | "banana";const fruits: Fruit[] = ["grape", "apple", "banana"];getIndexFromArray(fruits, "apple");getIndexFromArray(fruits, "peach");
Khi đó T bị suy luận là "grape" | "apple" | "banana" | "peach". Tuy nhiên, chúng ta chỉ muốn cho phép các phần tử có trong mảng làm argument thứ 2. Do đó, bằng cách sử dụng NoInfer, có thể ngăn chặn type inference của T.
tsfunctiongetIndexFromArray <T extends string>(elements :T [],item :NoInfer <T >): number {returnelements .findIndex ((element ) =>element ===item );}typeFruit = "grape" | "apple" | "banana";constfruits :Fruit [] = ["grape", "apple", "banana"];getIndexFromArray (fruits , "apple");Argument of type '"peach"' is not assignable to parameter of type 'Fruit'.2345Argument of type '"peach"' is not assignable to parameter of type 'Fruit'.getIndexFromArray (fruits ,"peach" );
tsfunctiongetIndexFromArray <T extends string>(elements :T [],item :NoInfer <T >): number {returnelements .findIndex ((element ) =>element ===item );}typeFruit = "grape" | "apple" | "banana";constfruits :Fruit [] = ["grape", "apple", "banana"];getIndexFromArray (fruits , "apple");Argument of type '"peach"' is not assignable to parameter of type 'Fruit'.2345Argument of type '"peach"' is not assignable to parameter of type 'Fruit'.getIndexFromArray (fruits ,"peach" );
Thông tin liên quan
📄️ Type inference trong khai báo biến
TypeScript có tính năng gọi là type inference (suy luận kiểu). Type inference là tính năng cho phép compiler tự động xác định kiểu. Lập trình viên có thể tận dụng type inference để bỏ qua type annotation, giảm lượng code cần viết.