gpt4 book ai didi

typescript 类型字符串不可分配给类型 keyof

转载 作者:行者123 更新时间:2023-12-04 01:34:00 27 4
gpt4 key购买 nike

我有以下代码:

const KeyboardEventKeys = {
Escape: 'Escape',
Enter: 'Enter',
Tab: 'Tab'
};

type KeyboardEventKeys = keyof (typeof KeyboardEventKeys);

function doSomething(key: KeyboardEventKeys) {}

当我将对象属性之一的值传递给函数时,它会对我大喊大叫:
doSomething(KeyboardEventKeys.Enter);

一种解决方案是投 as KeyboardEventKeys ,但这是一个多余的解决方案。没有它我怎么办?

我也不想添加 doSomething(key: KeyboardEventKeys | string)因为我会失去类型保护。

最佳答案

使用枚举的解决方案是一个很好的解决方案,我建议您使用它。

出现错误的原因是 typescript 不会推断 const 成员的字符串文字类型。您可以在创建 const 时使用额外的函数强制编译器推断字符串文字类型。 :

function createEnum<T extends { [P in keyof T]: P }>(o: T) {
return o
}
const KeyboardEventKeys = createEnum({ // typed as { Escape: "Escape"; Enter: "Enter"; Tab: "Tab"; }

Escape: 'Escape',
Enter: 'Enter',
Tab: 'Tab'
});

type KeyboardEventKeys = keyof (typeof KeyboardEventKeys);

function doSomething(key: KeyboardEventKeys) { }
doSomething("Enter")
doSomething("") //err

关于 typescript 类型字符串不可分配给类型 keyof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com