TypeScript не может связать вместе два экземпляра this.state.variables[entity.variable]
- один передается в тип защиты, а другой используется впоследствии. Для него это два несвязанных запроса в массив, поскольку entity.variable
может быть очень хорошо изменен каким-то скрытным процессом (или даже защитником типов, если он находится в той же области видимости), а система типов не может перехватить что.
Обходной путь - использовать временную переменную:
type Variable = string[] | File;
function isFile(variable: Variable): variable is File {
return (variable as File).name !== undefined;
}
function getFileFromVariables(entity: EntityInterface) {
const variable = this.state.variables[entity.variable];
return isFile(variable) ? variable : undefined;
}
const file = getFileFromVariables(someEntity);
Примечание: попробуйте предоставить автономный пример, другими словами, MCVE . Ваш код было невозможно проверить, так как мы не знаем ни как выглядит EntityInterface
интерфейс, ни как this
или this.state
. Мой ответ предполагает, что this.state.variables
относится к типу Variable
и EnintyInterface extends {variable: number}
, и этого достаточно для того, чтобы код, предоставленный вами, дал вам результат, который вы запрашиваете, но, пожалуйста, не заставляйте нас делать такие предположения.