Home > Back-end >  TypeScript: json and interface
TypeScript: json and interface

Time:02-22

I have an interface for an element:

export interface iElm {
name?: string;
appearance?: string;
atomic_mass?: number;
boil?: number;
category?: string;
density?: number;
discovered_by?: string;
melt?: number;
molar_heat?: number;
named_by?: string;
number?: number;
period?: number;
phase?: string;
source?: string;
spectral_img?: string;
summary?: string;
symbol?: string;
xpos?: number;
ypos?: number;
shells?: number[];
electron_configuration?: string;
electron_configuration_semantic?: string;
electron_affinity?: number;
electronegativity_pauling?: number;
ionization_energies?: number[];
cpk_hex?: string;
}

I got this by using a utility similar to the one in this question (json to ts): How to convert a json to a typescript interface?

The json that I'm using is an object of element object that are all a bit different but one looks like this:

"helium": {
"name": "Helium",
"appearance": "colorless gas, exhibiting a red-orange glow when placed in a high-voltage electric field",
"atomic_mass": 4.0026022,
"boil": 4.222,
"category": "noble gas",
"density": 0.1786,
"discovered_by": "Pierre Janssen",
"melt": 0.95,
"molar_heat": null,
"named_by": null,
"number": 2,
"period": 1,
"phase": "Gas",
"source": "https://en.wikipedia.org/wiki/Helium",
"spectral_img": "https://en.wikipedia.org/wiki/File:Helium_spectrum.jpg",
"summary": "Helium is a chemical element with symbol He and atomic number 2. It is a colorless, odorless, tasteless, non-toxic, inert, monatomic gas that heads the noble gas group in the periodic table. Its boiling and melting points are the lowest among all the elements.",
"symbol": "He",
"xpos": 18,
"ypos": 1,
"shells": [2],
"electron_configuration": "1s2",
"electron_configuration_semantic": "1s2",
"electron_affinity": -48,
"electronegativity_pauling": null,
"ionization_energies": [2372.3, 5250.5],
"cpk_hex": "d9ffff"
}

As you can see everything lines up with the iElm interface (properties are optional because there are some weird corner case elements)

Now here's my problem: I have a React function component that takes in an iElm:

const Element: FC<iElm> = (props) => {
    // some jsx stuff with the data 
}

I can pass properties of the json to Element like so:

<Element name={table.boron.name}/>

But is there some workaround so that I don't have to go through every property one by one and copy it over?

CodePudding user response:

You can simply use the spread operator to pass the entire object in:

<Element {...table.boron} />
  • Related