Вы можете , просто приведите его к своему типу союза:
const apiRoleArray = ["ADMIN", "USER"];
const realRoleArray: Role[] = <Role[]>apiRoleArray;
НО вы, вероятно, хотите проверить его содержимое, а не просто доверять API. :-) Опираясь на ответы на этот вопрос , вы можете создать тип, используя ключи объекта, а не определяя его буквально (см. Здесь принятый ответ , почему):
const roleStrings = {
USER: "",
PRESENTER: "",
ORGANIZER: "",
ADMIN: ""
};
export type Role = keyof typeof roleStrings;
затем дайте себе функцию проверки:
const isRole = (s: string): s is Role => {
return roleStrings.hasOwnProperty(s);
};
затем надежная функция преобразования, например:
const rawToRoleArray = (rawArray: string[]): Role[] => {
return rawArray.map(s => {
if (!isRole(s)) {
throw new Error("Invalid Role: " + s);
}
return <Role>s;
});
};
(вы можете комбинировать их, если они вам не нужны отдельно)
затем используйте его:
// Valid
const realRoleArray: Role[] = rawToRoleArray(["ADMIN", "USER"]);
console.log(realRoleArray);
// Invalid
const realRoleArray2: Role[] = rawToRoleArray(["ADMIN", "FOO"]);
console.log(realRoleArray2);
Жить на детской площадке | Live на jsFiddle