有没有办法让TS知道param
不仅仅是string
,而且是类型RoleWithTier
(显式as
强制转换除外(?
enum Role {
USER = 'user',
ADMIN = 'admin'
}
enum Tier {
ENTRY = 1,
MAXIMUM = 10
}
type RoleWithTier = `${Role}.${Tier}`
const param = `${Role.USER}.${Tier.ENTRY}`
const selectAction = (rwt: RoleWithTier) {
// do stuff
}
selectAction(param) // Argument of type 'string' is not assignable to parameter of type '"user.1" | "user.10" | "admin.1" | "admin.10"'.(2345)
TS游乐场链接
当您声明param
时,它的类型被推断为string
,随后的调用不会改变这一点。直接传递模板字符串:
selectAction(`${Role.USER}.${Tier.ENTRY}`); // ok
或者添加const
断言:
const param = `${Role.USER}.${Tier.ENTRY}` as const;
您可以正常键入param
变量:
const param: RoleWithTier = `${Role.USER}.${Tier.ENTRY}`;
此外,参数值中缺少.