随着API我得到状态的名称。从他们那里,在工厂的帮助下,我在前面形成了状态实例。附带API一根绳子。为了使代码中没有错误并且可以输入,我创建了enum状态名称:
export enum STATUSES_NAMES {
CREATED = 'Создано',
DELETED = 'Удалено',
// Очень много имён статусов
}
工厂实例化状态:
// Импорты
export default class FactoryStatuses {
public static createByName(name: STATUSES_NAMES): IStatus {
const parameters = {
name,
};
return FactoryStatuses._create(parameters);
}
public static createFromDB(parameters: IConstructorParameters): IStatus {
const _parameters = {
name: parameters.name,
};
return FactoryStatuses._create(_parameters);
}
private static _create(parameters: IConstructorParameters): IStatus {
if (!FactoryStatuses._existsName(parameters.name)) {
throw new Error('Status name dose not exist');
}
return new Status(parameters);
}
private static _existsName(name: string): boolean {
return Object.values(STATUSES_NAMES).includes(name);
}
}
接口:
export interface IStatus {
name: STATUSES_NAMES;
}
export interface IConstructorParameters {
name: string;
}
我在方法中existsName收到类型错误:
TS2345:“字符串”类型的参数不可分配给“状态名称”类型的参数。
如何解决这个问题或正确创建它enum?
function isNumber(x: any): x is numberhttps://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guardsassert(condition: any, msg?: string): asserts conditionhttps://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions一
// @ts-ignore2
name as any||name as STATUSES_NAMES3
沙盒
四
您还可以提出主题的变体:
5 但它会是正确的
比较:
您可以通过添加关联来消除错误
enum:类似的问题:https ://stackoverflow.com/ 。
PS 一个 看起来更像拐杖的解决方案,但我没有找到任何其他更好的选择。