Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
November 29, 2021 07:53 pm GMT

TypeScript: Creating a Dynamic Interface

During my time as a developer I've created a lot of "typed" code. One particular issue has come up repeatedly and I finally had a moment of clarity.

The Problem

Whenever I write something like this ...

export interface ConfigType {  type: string;}export interface DataModel {  config: ConfigType; // ERROR HERE  [key: string]: string;}

... I get the following error on the commented line above.

Property 'config' of type 'ConfigType' is not assignable to 'string' index type 'string'.

The issue is that the [key: string]: string; line gets enforced on all key/value pairs on the interface.

I've seen something like the following ...

export interface Person {  id: number;  firstname: string;  lastname: string;  [key: string]: string | number;}

... and this code does not present an error. This is because the[key: string]: string; line gets enforced on all key/value pairs on the interface and they are string or number.

I came up with two approaches to solving the issue listed below. I think the first is the better approach, but I will list both for consistency.

The Type Approach

This approach seems much cleaner, creating a new data type that has the fixed and dynamic portions ANDed together.

export interface ConfigType {  type: string;}export type DataModel = {  config: ConfigType;} & {  [key: string]: string;};

The Union Approach

The following code is another resolution.

export interface ConfigType {  type: string;}export interface DataModel {  config: ConfigType;  [key: string]: string | ConfigType;}

This approach has the "issue" that a new "key" could be used with another ConfigType.

Conclusion

As I said, I think the first approach (the Type Approach) is the better of the two.

If anyone has another or better pattern, please let me know.


Original Link: https://dev.to/rfornal/typescript-creating-a-dynamic-interface-59le

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To