【发布时间】:2020-12-27 09:26:12
【问题描述】:
我正在尝试实现一个由字符串组成的 Enum,以使我的代码更加健壮。
方法addSkills() 接收(以及其他)一个字符串数组的技能参数。
这里是测试代码:
it('should record skills into database', async () => {
const id = '19'
const token = 'a64a47cc4c3c6282c229df78aab373c3d0dd94c4'
const newSkill = 'Friendly'
await service.addSkills(id, token, [newSkill])
const recordedSkills = service.getCandidateSkills(id)
expect(recordedSkills).toContain('Friendly')
})
})
这里是临时生产代码:
async addSkills(
id: string,
token: string,
skills: SoftSkillsEnum[]
): Promise<[] | null> {
throw new HttpException('Unknown resource', HttpStatus.NOT_FOUND)
}
export enum SoftSkillsEnum {
CREATIVE = 'Creative',
FUNNY = 'Funny',
EMPATHETIC = 'Empathetic',
EXPLORER = 'Explorer',
SPORTY = 'Sporty',
SUPER_SMART = 'Super Smart',
FRIENDLY = 'Friendly',
}
测试代码在测试代码的第 5 行触发了 Typescript 错误:
TS2322: Type '"Friendly"' is not assignable to type 'SoftSkillsEnum'.
据我了解,Typescript 区分了字符串和由字符串组成的枚举。但我不希望我的方法接受任何字符串,输入应该匹配预定义的字符串列表(预定义的“softsSkills”)。
无论如何要让它工作还是我必须放弃我的枚举实现尝试?
【问题讨论】:
标签: string typescript enums