Я создаю универсальный класс с именем Loadable<T>
с двумя полями.Один из них называется state
и содержит текущее состояние загружаемого ресурса.Второй называется data
и содержит значение загружаемого ресурса.
state
определяется как "loading" | "loaded" | "error"
, и я хотел бы ввести data
для изменения в зависимости от текущего значения state
.
Например, если state
равно "loading"
, тогда data
должно быть null
.Я не могу понять синтаксис, чтобы сделать это.
Я создал type
с именем LoadableState<T, U>
, который определен как:
type LoadableState<T, U> =
T extends "loaded" ? U :
T extends "loading" ? null :
T extends "error" ? string :
never;
Где передано T
должно бытьвведите "loaded" | "loading" | "error"
.
Эта часть работает, но попытка определить data
из этого не дает.
export class Loadable<T> {
public state: "loaded" | "loading" | "error" = "loading";
public data: LoadableState<state, T>;
// ^^^^^ Cannot find name 'state`
}
TypeScript выдает следующую ошибку: Cannot find name 'state'
Другие вещи, которые я пробовал:
public data: LoadableState<this.state, T>;
// Duplicate identified 'state'
public data: LoadableState<typeof this.state, T>;
// Cannot find name 'this'
public data: LoadableState<typeof state, T>;
// Cannot find name 'state'
public data: state extends "loaded" ? T :
state extends "loading" ? null :
state extends "error" ? string :
never;
// Cannot find name 'state'
Я не уверен, возможно ли это на самом деле.Если это не так, есть ли другое решение этой проблемы?