Function Interface in TypeScript

Learn via video courses
Topics Covered

Overview

The contract in your application is defined by the interface, which is a structure. It specifies the syntax that classes must use. An interface's structure must be followed by classes that are derived from it.

The interface is not converted to JavaScript by the TypeScript compiler. The interface is used for type verification. Duck typing and structural subtyping are other terms for this process. A function or arrow function can be used to declare methods and attributes in an interface, which is specified by the keyword interface.

Introduction

We may use the interface as a variety of types in TypeScript, one of which can be used as a function type. In TypeScript, method signatures may be defined inside of a function interface by using a function interface. The only difference between TypeScript's easy-to-use keys and typical Typescript interfaces is that we may create a function inside of them, allowing us to utilize them as necessary. For example, the same method from the Typescript interfaces can be used to add, delete, or update data.

Next, we'll examine the implementations of the other TypeScript Interfaces types, and then we'll examine the two TypeScript Interfaces naming conventions. The contract in our application is dictated by the underlying structure, which is implemented by its types.

It outlines the syntax that classes must use. All classes that are derived from the TypeScript Interfaces must follow the structure that is given by that interface. The TypeScript compiler does not translate the TypeScript Interfaces into JavaScript.

What are the TypeScript Interfaces?

The contract in your application is defined by the interface, which is a structure. It specifies the syntax that classes must use. A Typescript interfaces structure must be followed by classes that are derived from it.

The interface is not converted to JavaScript by the TypeScript compiler. Typescript Interfaces are used for type verification. Duck typing and structural subtyping are other terms for this process.

A function or arrow function can be used to declare methods and attributes in an interface, which is specified by the keyword interface.

Syntax

They are comparable to all other TypeScript interface types, as was discussed. We may specify our function signature there.

Let's examine its syntax in further depth to improve usage inside the program and increase efficiency:

As you can see from the syntax in the lines above, we are just utilizing the keyword "interface" here. We are also declaring our function, which may be used later, inside of it.

Let's look at some example syntax to help:

As you can see from the syntax in the lines above, TypeScript makes it very simple to create a functional interface.

Why are Typescript Interfaces Used?

Typescript Interfaces aid in the definition of a specific strategy for the implementation of an entity, as you have previously discovered. In addition, interfaces aid JavaScript engines' performance.

This section presupposes that you are familiar with JavaScript engines. We'll go deeper into how JavaScript engines function in this part and learn how typescript interfaces improve speed.

TypeScript interfaces only exist at compile time. which was produced by the TypeScript compiler. The ToyotacarsPrototype function Object() adds the length, model, Baseprice, and seatingCapacity characteristics of the Toyotacars interface while attaching the function types to the prototype of the ToyotacarsPrototype function. The JavaScript engines are completely ignorant of interfaces.

We will have to deal with thousands of objects of type Toyotacars if we instantiate thousands of ToyotacarsPrototype cars. The structures of each of these items will resemble those of the interface.

Each object created by the JavaScript engines of type Toyotacars only has the matching values of the properties specified in the Toyotacars interface.

Typescript Interfaces as Type

Typescript interfaces may be used to both define and implement types in classes.

The subsequent interface A variable's type is specified by an employee.

An interface sample in the example above has two properties key and value. The variable 'try1' has the typebsample defined. As a result, it must comply to the structure of the sample. This means that the variable 'try1' may only be assigned to an object having the key and value attributes of type number and string. If the attribute names are modified in any manner, or if the data type changes from the example, the TypeScript compiler will generate an error. An error will occur if the value is assigned to another variable, 'try2', which is also of the sample type but has the value value1 rather than value. Because 'try3' assigns a number to the value property in the same way, the compiler will generate an error.

Interface for Array Type

The user may simultaneously store several values in the same variable thanks to the TypeScript Array of Objects. A fixed-size sequence collection of elements of the same type is kept in an array of objects. TypeScript arrays are fundamentally data types, much like strings, Booleans, and integers. We are aware that there are many TypeScript declaration methods for arrays. The TypeScript Array of Objects is one of them, and the user may define it by putting brackets after the interface. It might be referred to as an interface or an inline interface. Let's examine a few instances and go in-depth with the TypeScript syntax explanation for defining an array of objects.

Syntax

An array of objects may be declared using the following syntax using an inline type:

The following is the TypeScript syntax for defining an array of objects using a Named Interface:

Thus, we are employing a named interface here. The user may reuse the sample arr and named interfaces stated previously. As this interface may be imported or exported to certain other files where users can make references to the same data structure, it appears more simple and cleaner.

Regulations and Guidelines for Implementation

  • The same-named interface declarations in TypeScript can be combined.
  • Although interfaces can include numerous declarations with the same name, they are a little less versatile when it comes to advanced inline types or union types.
  • TypeScript uses the Array of Objects Inline Type declaration by default.
  • The majority of the components of a TypeScript array of objects may be utilized interchangeably.
  • While Interfaces are more predisposed to fundamental type structures like an object or a class, etc., Inline Kinds may be used to alias far more complex types.
  • The class does not know which methods or values should be implemented, therefore users cannot use the keyword implemented on an inline type of union between the different kinds.
  • The user cannot specify an interface that extends a union type in the same context. An interface prototype must be defined in a declaration rather than when it is used.

With a few examples, let's see how an array of objects functions in TypeScript.

Example 1

A Simple Inline Type Declaration of an Array of Objects

Output:

As a result, we may retrieve the employee information with the aid of an index designated as id here.

Example 2

A straightforward illustration of an object array using a named interface

Output:

When declaring the array of objects, we use the Named Interface method.

Example 3

An array of Objects with just an Undefined Array

Output:

Interface as Function Type

The syntax is applicable to any Typescript interface, but Typescript React classes are only used as examples since function types are particularly helpful there.

Example 1

A Function without Arguments and Without a Return Value:

The function declaration is tested in the example below. We specify the return type to be any since the function has no output (returns void). This is due to the fact that emptiness and never are assessed differently depending on the situation. Here are a few illustrations of typed return values.

Example 2

An Argument-Accepting Function

Include the name and type of the argument. When you create the real function, the type must match, but the parameter name is not necessary to match. Duck typing is used throughout Typescript.

Example 3

Function that Takes an Argument and Returns a Value

This method returns a number after accepting a string as input.

Example 4

An Optional Function

Add the Optional Operator? after the property name. Place the? before the argument list and after the property name. All props in TypeScript React are necessary unless the Optional Operator is used. You must first determine whether a React non-required prop is undefined before using it.

Example 5

Applying the Keyword Type’

When using a type in an interface, it might be more easy and simple to define the type of the function first. The syntax is slightly different when a function is being declared as a type. Put the arrow operator to use.

How Does the Function Interface Work in Typescript?

An interface can be implemented by a class or function to specify how the attributes described in that interface will be implemented.

Let's implement the interface by writing a function:

The TypeScript compiler will provide the following error when you run the code seen above:

No parameter of type Toyotacars may take an argument of type {Model: string, length: string, baseprice: string, or measurement: () => void. } Only known characteristics may be specified using object literals because the type Toyotacars does not support measurement.

Two Things Cause the Compiler to Complain:

  • The interface defines the attributes length, Model, and baseprice as being of type number, thus it anticipates that they will be of type number rather than string.
  • The interface does not define the property measurement. Getmeasurement should be the name of the function, and it should return an integer. An entity's implementation should adhere to the contract as specified in its interface.

The Definition of Optional Attributes in Interfaces

The implementation of the entities is much improved via interfaces. It might not always be required to have all of the attributes specified in the interface, though. These are referred to as optional properties and are shown in the interface as follows:

The ? in the getTyrePressure property should be noted. The question Mark denotes that entities do not have to implement the functionality of the property getTyrePressure in all models and that it is optional. Even if you don't include this property in the carObj argument, the compiler won't raise an error.

Additionally, the compiler looks for extra attributes that are not specified in the interface. Let's imagine that the carObj interface does not specify the extra property Color that is present in the carObj:

The following error is returned by the compiler:

Argument of type length: number; Model: string; baseprice: number; getTyrePressure: () => number; getmeasurment: () => number; colour: String; and baseprice: number is not a criterion of the Toyota automobiles type. Only known characteristics may be specified in object literals because the Toyotacars type does not have Color.

Interface Read-Only Properties

Once initialized, read-only attributes cannot be altered. For instance, after they have been initialized with a fixed value, the attributes length, model, wheelbase, and seatingCapacity should never be changed.

Our user interface will need to be updated to reflect this change:

Take note of how the readonly keyword is used with the properties' names. It implies that once they are initialized with a value, these attributes cannot be changed.

Definition of Function Types in Interfaces

The structure of a function can also be defined via an interface. The getTyrePressure and getmeasurement methods are defined as properties on the Toyotacars interface, as we previously observed. For functions like these, we can specify an interface, though:

Type Ordered to use the order function. It requires two arguments of type number and outputs a boolean value.

As you can see from the code above, there is no need to describe the type of parameters once again when defining the order function. The arguments defined in the interface are simply mapped one-to-one with those defined in the function declaration by the compiler.

It implies that modId maps to modelId and custId translates to customerId, both of which have numbered as their type. Even the order function's return type may be deduced from its declaration in the interface.

Interfaces with Indexable Attributes

As the name implies, indexable attributes are used to define types that are indexed into a special number or string. One way to define the type Sample_Array is as follows:

Output:

You cannot use array built-in operations like push, pop, filter, etc. on the vehicle's variable since it is not an ordinary array. You may contend that utilizing indexable types is preferable to defining regular arrays. When you need to create custom attributes and methods that should work on a variety of values belonging to the same data type, indexable types come in handy.

Rules and Regulations for Function Interface

When using TypeScript's function interface, there are a few guidelines that must be followed:

  • The method signature, not the implementation, should be the only thing in the function interface.
  • The interface keyword should be used before the interface name when creating an interface.
  • It should make reference to the implemented function when generating the object for the interface function.
  • The interface variable type and function return type should be appropriately indicated when creating the function inside the interface.
  • The method signature for the functional interface must match exactly when providing the implementation for it to operate properly.

Variables of Several Kinds in A Class

There are three main kinds of variables in a class:

Local Variables

Local variables are set at the function or block level. It only exists when the function or block is being executed. New copies of the local variables are produced in memory each time a function is executed.

Instance Variables

Variables that are instances of a class are known as instance variables. They are used to keep class objects' characteristics in storage. Each object has a unique copy of the instance variables.

Static Variables

Static variables Because they are linked to a class as a whole, static variables are also known as class variables. The static variables used by a class are shared by all of its objects.

Please be aware that interfaces only address the class's instance portion. The function Object() function, for instance, belongs under the static section. Nothing regarding the function Object() or the static portion is specified in the Toyotacars interface.

Interface Expansion

Any other interface's properties can be imported and extended by an interface. This makes it easier to create compact, reusable components. For instance, we may design many user interfaces to manage the various Toyota Model components as follows:

The Wheel and Seat attributes are expanded by the Toyotacars interface. Making several interfaces for handling various components is a smart approach rather than dumping all the attributes into one interface.

Typescript Type Vs Interface

TypeScript InterfacesTypescript Type
Unions receive no supportUnions receive support from type
A tuple can be declared, but it's less obvious than typeTuples are explicitly declared
Interfaces cannot utilize primitives.Types can utilize primitives.
The & keyword cannot be used in the intersection to merge several interfaces into a single interface.Using the & keyword, an intersection may merge many types into a single type.
favors inheritanceInheritance are not favoured
favours the merger of declarationsDoesn’t favours the merger of declarations

Conclusion

  • We may specify the attributes, including the types of entities in our project, using the TypeScript Interface.
  • We can write fewer codes thanks to TypeScript Interface. This is due to the fact that we will just need to type the TypeScript Interface name instead of constantly repeating the properties.
  • Interfaces describe the details of entities, and functions or classes that can carry out their implementation. Use the ? operator to define optional properties on an interface, and the readonly keyword in the property name to define read-only properties.
  • Additionally, the TypeScript compiler looks for extra properties on an object and throws a warning if one is found that is declared in the interface.
  • Using the extends keyword, interfaces may be expanded to import properties from other interfaces.
  • We can create reusable components by combining the strength of generics with interfaces.
  • Additionally, we learned how interfaces improve the efficiency of JavaScript engines.