bugfix> typescript > 投稿

具体例として、タイプBが string の場合その後、タイプAは string 以外のものになります

私は次のようなものを試しました

type A = Exclude<any, string>

しかし、問題はその any すべての可能なタイプの完全なリストではありません。何かのようなもの...

const a: A = 'monkey'

...はまだ有効です。しかし、私が次のようなことをした場合:

type C = string | number | boolean | Array<number>
type A = Exclude<C, string>

次に、タイプAの変数に文字列を割り当てることは無効になります。

const a: A = 'monkey' //Invalid, as desired

問題は、タイプCがすべての可能なタイプであると定義することは実際には不可能であることです。可能性のあるすべての型を保持する別のtypescript型があるかもしれないと思いました。しかし、そのようなものを見つけることができないようです。

回答 1 件
  • 以下を使用して、関数でこれを防御できます。

    type NotString<T> = Exclude<T, string>;
    function noStrings<T>(anythingButAString: T & NotString<T>) {
      return anythingButAString;
    }
    // Works
    noStrings(1);
    noStrings(['okay', 'yep']);
    noStrings(() => '');
    // Fails
    noStrings('example');
    
    

    それでも any で回避できますが ...しかし、それは非常に意図的です:

    // You can still get around it...
    noStrings<any>('example');
    
    

    変数型の注釈のためだけにこれを簡単に行う方法は考えられません。

あなたの答え