私はこのコードのビットと活字体のエラーに実行しているよ:活字エラー:プロパティ「...」タイプに欠けている「...」
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のプロパティを定義したくありません。
良い方法がありますか?
ありがとうございます!
にキャストしてみあなたは二重のキャストを試してみましたか? ( 'evt:KeyboardEvent =({...} any)as KeyboardEvent') – olivarra1
@ olivarra1単純なシングルキャストでさえトリックします。れるKeyboardEventとして; 'れるKeyboardEvent = {75 \tでpreventDefault:()=> {}、 \tのstopPropagation:()=> {}、 \tのkeyCode}'イベントをみましょう。 TypeScriptがそれを許しているのを知らなかった。優れた発見。 –
3つのプロパティだけが必要な場合は、これらの3つのプロパティで独自のインターフェイスを定義し、コード全体で使用することができます。本当の 'KeyboardEvent'を使わないでください。実際のイベントがあなたに割り当てられるようにしてください。 – artem