--- description: 'Disallow using the unsafe built-in Function type.' --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; > 🛑 This file is source code, not the primary documentation location! 🛑 > > See **https://typescript-eslint.io/rules/no-unsafe-function-type** for documentation. TypeScript's built-in `Function` type allows being called with any number of arguments and returns type `any`. `Function` also allows classes or plain objects that happen to possess all properties of the `Function` class. It's generally better to specify function parameters and return types with the function type syntax. "Catch-all" function types include: - `() => void`: a function that has no parameters and whose return is ignored - `(...args: never) => unknown`: a "top type" for functions that can be assigned any function type, but can't be called Examples of code for this rule: ```ts let noParametersOrReturn: Function; noParametersOrReturn = () => {}; let stringToNumber: Function; stringToNumber = (text: string) => text.length; let identity: Function; identity = value => value; ``` ```ts let noParametersOrReturn: () => void; noParametersOrReturn = () => {}; let stringToNumber: (text: string) => number; stringToNumber = text => text.length; let identity: (value: T) => T; identity = value => value; ``` ## When Not To Use It If your project is still onboarding to TypeScript, it might be difficult to fully replace all unsafe `Function` types with more precise function types. You might consider using [ESLint disable comments](https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1) for those specific situations instead of completely disabling this rule. ## Related To - [Avoiding `any`s with Linting and TypeScript](/blog/avoiding-anys) - [`no-empty-object-type`](./no-empty-object-type.mdx) - [`no-restricted-types`](./no-restricted-types.mdx) - [`no-unsafe-call`](./no-unsafe-call.mdx) - [`no-wrapper-object-types`](./no-wrapper-object-types.mdx)