Почему typescript не реагирует на тип при использование promise?

Рейтинг: 0Ответов: 1Опубликовано: 12.02.2023

Я записала в переменную 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();

Ответы

▲ 2Принят

TypeScript не настолько умный что бы вывести тип из вызова функции resolve.

Варианты:

  1. явно указать тип (new Promise<MyDataType>...), тогда TS сможет проверить что вызовы resolve соответствуют этому типу;
  2. использовать статический метод Promise.resolve, тогда TS может вывести тип возвращаемого значения (в вашем тривиальном примере).

playground

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();