KeyboardEvent['key']
属性和React.KeyboardEvent['key']
综合事件属性用string
键入。大多数时候,当我们检查这些事件之一的值(或构造一个假事件进行测试)时,它是以下几个字符串之一:Enter
,Escape
,UpArrow
等
我想让IntelliSense对我们可能正在寻找的值进行猜测,但是随着它回落以接受任何字符串,例如在特殊键盘键的值之上,该值也可以是任何字符,包括表情符号。
使用函数,这样做很容易,至少在您自己定义函数时(我不知道扩展另一个库)。
type Foo = 'aa' | 'bb' | 'cc';
function foo(x: Foo): void;
function foo(x: string): void;
function foo(x: string) {
}
这不是 perfect ,但是如果您输入foo('
并按 ctrl + space ,'aa'
,{ {1}}和'bb'
将作为选项弹出。
使用接口可以吗?我已经尝试了几件事,但是没有用。
'cc'
我唯一想到的是创建扩展两个事件type Foo = 'aa' | 'bb' | 'cc' | 'zz';
interface X {
f: Foo;
}
interface X {
f: string; // error
}
const x: X = {
f: 'foo',
};
interface Y {
f: Foo | string;
}
const y: Y = {
f: '', // no intellisense
};
interface Z<F extends string = Foo> {
f: F;
}
const z: Z = {
f: 'def', // intellisense but no fallback
};
和Omit
属性的新接口,并用我的值子集重新定义prop。然后,每当创建一个处理程序时,我们只需告诉函数它是那些接口之一,而不是原始接口。
key
这有点奏效,但并不是完全理想,特别是因为我的团队需要记住使用新界面。另外,它没有字符串回退,因此,如果我们要同时处理 A 和 enter 键盘事件,则不能使用新接口。
想法?