Skip to content

Instantly share code, notes, and snippets.

@SergeyMell
Created September 5, 2021 14:48
Show Gist options
  • Save SergeyMell/bb168ca38861dd3db4a1401cc67e8bc8 to your computer and use it in GitHub Desktop.
Save SergeyMell/bb168ca38861dd3db4a1401cc67e8bc8 to your computer and use it in GitHub Desktop.
Convert server response into Typescript interface
// Main function
function convertToInterface(obj) {
  const resObj = {};
  for (let key in obj) {
    if (typeof obj[key] === 'string') {
      resObj[key] = 'string';
    } else if (typeof obj[key] === 'number') {
      resObj[key] = 'number';
    } else if (typeof obj[key] === 'boolean') {
      resObj[key] = 'boolean';
    } else if (typeof obj[key] === 'string') {
      resObj[key] = 'string';
    } else if (obj[key] === null || (typeof obj[key] === 'undefined')) {
      resObj[key] = 'any';
    } else if (Array.isArray(obj[key])) {
      resObj[key] = [convertToInterface(obj[key][0])];
    } else {
      resObj[key] = convertToInterface(obj[key]);
    }
  }
  return resObj;
}
// Use case example;
const dataExample = {
name: 'Yoda',
age: 900,
meta: {
color: 'green',
height: 0.7,
isJedi: true
}
};
JSON.stringify(convertToInterface(data));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment