老实说,我不知道我的设置是否有问题,或者这是否是typescript功能。在以下示例中:
type AllowedChars = 'x' | 'y' | 'z';
const exampleArr: AllowedChars[] = ['x', 'y', 'z'];
function checkKey(e: KeyboardEvent) {
if (exampleArr.includes(e.key)) { // <-- here
// ...
}
}
typescript编译器抱怨Argument of type 'string' is not assignable to parameter of type 'AllowedChars'.
但是我在哪里分配?Array.prototype.includes
返回一个布尔值(我没有存储)。我可以通过类型断言消除错误,如下所示:
if (exampleArr.includes(e.key as AllowedChars)) {}
但这如何正确,我期待用户输入可以是任何内容。我不明白为什么一个函数(Array.prototype.includes()
)以检查是否一个元素在数组中发现,有关于输入的期望类型的知识。
我的tsconfig.json
(typescript v3.1.3):
{
"compilerOptions": {
"target": "esnext",
"moduleResolution": "node",
"allowJs": true,
"noEmit": true,
"strict": true,
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "preserve",
},
"include": [
"src"
],
"exclude": [
"node_modules",
"**/__tests__/**"
]
}
任何帮助,将不胜感激!