Unable to import URL class in Nodejs Typescript app

Viewed 25173

I am trying to import the URL class from the nodejs api so I can parse urls and retrieve their origin, hostname, and paths.

I am trying to do it by typing import * as URL from "url";

and I have also tried import { URL } from "url";

and I cannot seem to get this to work for me. Any help would be greatly appreciated.

The way I am trying to use this is as such

var site = new URL("http://www.website.com");

And it is throwing an error because it states that URL is not a constructor

3 Answers

The URL constructor was introduced as part of node v7.0. import { URL } from "url"; is the proper way to import it if you are using node >= v7.0. Make sure you are using the latest version of node typings as updated as well:

npm install --save-dev @types/node

If your node version is < 7.0 then you can use the parse method:

import * as url from "url";

var site = url.parse("http://www.website.com");
import * as url from 'Url';

{ parse: [Function: urlParse],
  resolve: [Function: urlResolve],
  resolveObject: [Function: urlResolveObject],
  format: [Function: urlFormat],
  Url: [Function: Url] 
}

It's not a constructor. You'll need to do use one of the exposed methods:

import * as url from 'url';

console.log(url.parse('https://www.google.com'))

// Output:
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.google.com',
  port: null,
  hostname: 'www.google.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/',
  path: '/',
  href: 'https://www.google.com/' }
undefined
>

If someone is wondering how to use URL so code is portable between Node.js and browser environment, then i've came to this solution:

import * as nodeUrl from "url";

const URL = typeof window !== "undefined" ? window.URL : nodeUrl.URL;

Related