2017-11-12 8 views
0

Partialのオブジェクトを作成します。ここで、キーは 'a'、 'b'、または 'c'の組み合わせです。それは3つのキーをすべて持っているわけではありません(編集:少なくとも1つは持っています)。これをTypescriptでどのように強制するのですか?Typescriptオブジェクト:キーを特定の文字列に制限するにはどうすればよいですか?

// I have this: 
type Keys = 'a' | 'b' | 'c' 

// What i want to compile: 
let partial: Partial = {'a': true} 
let anotherPartial: Partial = {'b': true, 'c': false} 

// This requires every key: 
type Partial = { 
    [key in Keys]: boolean; 
} 

// This throws Typescript errors, says keys must be strings: 
interface Partial = { 
    [key: Keys]: boolean; 
} 

上記の2つの方法(マッピングされたタイプとインターフェイスを使用)は、私が望むものを達成できません。誰でもここで助けることができますか?

答えて

3

あなたはこれを行うことができますので、キーをオプションにする

interface Partial { 
    a?: boolean; 
    b?: boolean; 
    c?: boolean; 
} 

?を使用したりすることができます

type Keys = "a" | "b" | "c"; 

type Test = { 
    [K in Keys]?: boolean 
} 
+0

感謝を!プログラムで「Keys」型を使ってこれを行う方法はありますか? また、少なくとも1つのキーが存在することを要求する必要がある場合はどうすればよいですか? –

+0

あなたのために更新しました – user184994

関連する問題