type Func = (foo:string) => void
// function expression
const myFunctionExpression:Func = function(foo) {
console.log(foo)
}
In the Typescript snippet above, I am using type alias to annotate the variable in a function expression.
The type alias:
type Func = (foo:string) => void
is reusable in another function expression to reduce repetition.
My question is: Is there a way to reuse this type alias to annotate a function declaration ?
// function declaration
function myFunctionDeclaration(foo:string):void {
console.log(foo)
}
After some search online, I cannot seem to find such syntax, what am I missing?
Thanks
update:
At the time of this writing there is a ticket on github requesting for this feature: Suggestion: Type annotations and interfaces for function declarations #22063 (thanks to comment from @jcalz)
Type Annotations are annotations which can be placed anywhere when we use a type. The use of Type annotation is not mandatory in TypeScript. It helps the compiler in checking the types of variable and avoid errors when dealing with the data types.
To define the return type for the function, we have to use the ':' symbol just after the parameter of the function and before the body of the function in TypeScript. The function body's return value should match with the function return type; otherwise, we will have a compile-time error in our code.
Similar to JavaScript, to pass a function as a parameter in TypeScript, define a function expecting a parameter that will receive the callback function, then trigger the callback function inside the parent function.
At time of writing (TypeScript 3.4), there is not a way to apply a type to a function declaration.
You can use the typescript utility types available from version 3.1 to achieve this.
Parameters<Type>
:
https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype
ReturnType<Type>
: https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype
Example fitting the question:
Typescript Sandbox
type Func = (foo:string) => void
// function expression
const myFunctionExpression:Func = function(foo) {
console.log(foo)
}
// function declaration
function myFunctionDeclaration(...[foo]: Parameters<Func>): ReturnType<Func> {
console.log(foo)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With