• ..

NuxtJS

    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
    }