2017-06-08 11 views

答えて

9

あなたはこれを達成するためにneverタイプと一緒に労働組合の種類を使用することができます。

type IFoo = { 
    bar: string; can?: never 
} | { 
    bar?: never; can: number 
    }; 


let val0: IFoo = { bar: "hello" } // OK only bar 
let val1: IFoo = { can: 22 } // OK only can 
let val2: IFoo = { bar: "hello", can: 22 } // Error foo and can 
let val3: IFoo = { } // Error neither foo or can 
+0

ブリリアント!私は、決してキーが存在することを禁じるために 'never'を使うことはできないと決して決して思いませんでした! – hasen

+0

偉大な、それは私が後にしたものです。 '+ 1'&accepted –

1

これを試してみてください。

type Foo = { 
    bar?: void; 
    foo: string; 
} 

type Bar = { 
    foo?: void; 
    bar: number; 
} 

type FooBar = Foo | Bar; 

// Error: Type 'string' is not assignable to type 'void' 
let foobar: FooBar = { 
    foo: "1", 
    bar: 1 
} 

// no errors 
let foo = { 
    foo: "1" 
} 
3

あなたは労働組合とオプションvoid typeで「1ではなく、他の」を得ることができます。

type IFoo = {bar: string; can?: void} | {bar?:void; can: number}; 

しかし、あなたが持っ防ぐために--strictNullChecksを使用する必要がありますどちらも

関連する問題