string and String are valid TypeScript types. The following declarations are valid:
let foo: String = 'foo';
let bar: string = 'bar';
Difference
string refers to the JavaScript's primitive types and can be created by using either literals (single or double quotes) or String function (without the new keyword).
The three declarations below create the same string:
const message = 'hello';
const message = 'hello';
const message = String('hello');
We often use typeof variable === 'string' to check if a given variable is a primitive string.
String on the other hand is an object that wraps the primitive string, and used to manipulate strings. We can create an instance of String from the constructor such as new String(...):
const message = new String('hello');
In order to check whether a variable is an instance of String object, we have to use the instanceof operator:
if (variable instanceof String) {
...
}
Good to know
Given the declarations at the top of this page, you can assign a String object to a primitive string variable:
let foo: String = 'foo';
let bar: string = 'bar';
foo = bar;
As the time of writing,
String is declared as an
interface so that the
string is treated as a subtype of
String. Assigning
foo = bar therefore does not cause any problem.
But doing the opposite assignment will throw an error:
Good practice
According to the official TypeScript's
Do's and Don'ts, it is recommended to not use
Number,
String,
Boolean,
Symbol, or
Object.
const reverse = (s: String): String => {
...
}
const reverse = (s: string): string => {
...
}