我有一个长数组:
const allRoles = {
'product_manager': [
{
id: 'productManager_1',
image: '/icon.png',
title: 'CEO of the product',
description: 'Some description'.</>,
},
'backend_engineer': [{...}]
...
}
组件代码:
// roleTitle = "Product Manager"
export function OverviewModal(roleTitle: string) {
const convertedRole: keyof typeof allRoles = roleTitle.toLowerCase().replace(/ /g,'_');
const roleCardInfo = allRoles[convertedRole];
// Tried the above but got an error:
// Type 'string' is not assignable to type '"product_manager" | "backend_engineer"...'.ts(2322)
在这种情况下,这似乎并不适用:Typescript Type 'string' is not assignable to type
而不是一个类,我只是有一个数组对象。我不知道在这个场景中它会是什么类型。
2条答案
按热度按时间m2xkgtsf1#
岑根说得对。
但是,如果您能够在编译时知道AllRoles的键,您可能会有一个解决问题的方法,如下所示:
如果是,那么您可以使用typeguard。
zazmityj2#
所以在这一部分,您实际上是在说
convertedRole
应该是allRoles
的某个键。allRoles
的类型是您要赋予它的值的形式。并且您已将参数roleTitle
声明为字符串。因此,字符串对于convertedRole的类型来说还不够窄。只能为convertedRole分配与allRoles
类型的键相同的字符串,即字符串“product_manager”|“后端工程师”...“。请记住,typescript在运行时并不存在,它不能在您运行代码时知道roleTitle的实际值。