Почему typescript не реагирует на тип при использование promise?
Я записала в переменную string значение number, и не получаю ошибки почему так происходит?
https://codesandbox.io/s/lucid-elgamal-4lbin2
const BEApi = new Promise((resolve) => {
resolve({
string: 123
});
});
type MyDataType = {
string: string;
};
let myData: MyDataType | null = null;
const myResponce = async () => {
myData = (await BEApi) as MyDataType;
console.log(myData);
};
myResponce();
Ответы (1 шт):
Автор решения: Alexey Ten
→ Ссылка
TypeScript не настолько умный что бы вывести тип из вызова функции resolve.
Варианты:
- явно указать тип (
new Promise<MyDataType>...), тогда TS сможет проверить что вызовыresolveсоответствуют этому типу; - использовать статический метод
Promise.resolve, тогда TS может вывести тип возвращаемого значения (в вашем тривиальном примере).
type MyDataType = {
string: string;
};
// Вариант 1
const BEApi1 = new Promise<MyDataType>((resolve) => {
resolve({
string: 123
});
});
// Вариант 2
const BEApi2 = Promise.resolve({
string: 123
});
let myData: MyDataType | null = null;
const myResponse = async () => {
myData = await BEApi1;
myData = await BEApi2;
console.log(myData);
};
myResponse();