2016-12-16 2 views
2

私はこのコードのビットと活字体のエラーに実行しているよ:活字エラー:プロパティ「...」タイプに欠けている「...」

let event: KeyboardEvent = { 
    preventDefault:() => { }, 
    stopPropagation:() => { }, 
    keyCode: 75 
}; 
誤りがある

Type '{ preventDefault:() => void; stopPropagation:() => void; keyCode: number; }' is not assignable to type 'KeyboardEvent'. Property 'altKey' is missing in type '{ preventDefault:() => void; stopPropagation:() => void; keyCode: number; }'.

私はそれを得る、それはタイプスクリプト、それは私が完全KeyboardEventを供給したいと思う。しかし、KeyboardEventの完全な定義は:

interface KeyboardEvent extends UIEvent { 
    readonly altKey: boolean; 
    readonly char: string | null; 
    readonly charCode: number; 
    readonly ctrlKey: boolean; 
    readonly key: string; 
    readonly keyCode: number; 
    readonly locale: string; 
    readonly location: number; 
    readonly metaKey: boolean; 
    readonly repeat: boolean; 
    readonly shiftKey: boolean; 
    readonly which: number; 
    readonly code: string; 
    getModifierState(keyArg: string): boolean; 
    initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void; 
    readonly DOM_KEY_LOCATION_JOYSTICK: number; 
    readonly DOM_KEY_LOCATION_LEFT: number; 
    readonly DOM_KEY_LOCATION_MOBILE: number; 
    readonly DOM_KEY_LOCATION_NUMPAD: number; 
    readonly DOM_KEY_LOCATION_RIGHT: number; 
    readonly DOM_KEY_LOCATION_STANDARD: number; 
} 

です。ユニットテストのためにこのイベントを作成しています.3つのプロパティが必要です。これに対処する適切な方法は何ですか?私は単にそれをanyと宣言するのを避けようとしています。私は実際に21のプロパティを定義したくありません。

良い方法がありますか?

ありがとうございます!

+2

にキャストしてみあなたは二重のキャストを試してみましたか? ( 'evt:KeyboardEvent =({...} any)as KeyboardEvent') – olivarra1

+2

@ olivarra1単純なシングルキャストでさえトリックします。れるKeyboardEventとして; 'れるKeyboardEvent = {75 \tでpreventDefault:()=> {}、 \tのstopPropagation:()=> {}、 \tのkeyCode}'イベントをみましょう。 TypeScriptがそれを許しているのを知らなかった。優れた発見。 –

+0

3つのプロパティだけが必要な場合は、これらの3つのプロパティで独自のインターフェイスを定義し、コード全体で使用することができます。本当の 'KeyboardEvent'を使わないでください。実際のイベントがあなたに割り当てられるようにしてください。 – artem

答えて

2

希望のタイプ

let event: KeyboardEvent = { 
    preventDefault:() => { }, 
    stopPropagation:() => { }, 
    keyCode: 75 
} as KeyboardEvent; 
関連する問題