string 型

stringは TypeScript で文字列だということを表現する型です。以下は変数の宣言時に一緒に使っている例ですがstringを使うと、その変数は変なことをしなければstringが入ってるということにできます。

const str: string = 'text';
// Type '123' is not assignable to type 'string'.
const numStr: string = 123;

TypeScript は賢いので型を指定せず入れてもstringとしてくれます。

let str = 'foo';
// ok
str = 'bar'

また String Literal Types と言われる、文字列だけどある特定の文字列を型として扱うことができます。この場合はある特定の文字列しか入れることができません。
これは型定義時にある特定の文字列stringの代わりに使うだけです。

const foo: 'foo' = 'foo';
// Type '"foo"' is not assignable to type '"bar"'.
const bar: 'bar' = 'foo';
// typescript@^3.4.0 から以下でも同じ意味
const foo = 'foo' as const;

Union と一緒に使うことで「Aという文字列」か「Bという文字列」というように扱える値を増やすことができます。以下の'foo' | 'bar'は、'foo''bar'だけ扱える型という意味になります。

// ok
let foo: 'foo' | 'bar' = 'foo';
// ok
foo = 'bar';
// Type '"baz"' is not assignable to type '"foo" | "bar"'.
foo = 'baz';

この String Literal Types はstringを継承している型ということなので、stringで宣言されている部分でも代入したり渡したりできます。

const fooOrBar: 'foo' | 'bar' = 'foo';
let value: string = fooOrBar;

文字列に絞り込む

ある Union 型などで「この値はstringか?」を調べるにはtypeof value === 'string'が使えます。

const a: string | number = 'foo';

if (typeof a === 'string') {
  a; // a: string
}