使用智能感知的字符串值重载TS接口属性

时间:2020-06-25 03:05:42

标签: typescript

KeyboardEvent['key']属性和React.KeyboardEvent['key']综合事件属性用string键入。大多数时候,当我们检查这些事件之一的值(或构造一个假事件进行测试)时,它是以下几个字符串之一:EnterEscapeUpArrow

我想让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'

TS Playground

我唯一想到的是创建扩展两个事件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 键盘事件,则不能使用新接口。

想法?

0 个答案:

没有答案