Строго набранное глубокое равное утверждение с TypeScript и Chai - PullRequest
0 голосов
/ 16 января 2019

У меня есть функция TypeScript, которая возвращает тип Foo:

interface Foo {
  bar: string;
  baz: string;
}

function getFoo(): Foo {
  return {
    bar: 'hello',
    baz: 'world',
  };
}

// Chai Assertion
it('Should return a Foo', () => {
  expect(getFoo()).to.deep.equal({
    bar: 'hello',
    baz: 'world',
  });
})

Когда я меняю интерфейс Foo, моя функция getFoo() выдает ошибку TypeScript:

interface Foo {
  bar: number;  // change these to numbers instead
  baz: number;
}

function getFoo(): Foo {
  // Compile time error! Numbers aren't strings!
  return {
    bar: 'hello',
    baz: 'world',
  };
}

Однако мой тест Mocha не вызывает ошибку времени компиляции!

Есть ли безопасный для типов способ сделать expect().to.deep.equal()? Что-то вроде:

// Strawman for how I'd like to do type-safety for deep equality assertions,
// though this generic signature still seems unnecessary?
expect<Foo>(getFoo()).to.deep.equal({
  bar: 'hello',
  baz: 'world',
});

1 Ответ

0 голосов
/ 16 января 2019

Существует ли типобезопасный способ ожидания (). To.deep.equal ()

Не в определениях типа equal, которые намеренно any, так как он предназначен для проверки во время выполнения .

Однако это легко сделать внешне:

const expected: Foo = {
  bar: 'hello',
  baz: 'world',
};
expect(getFoo()).to.deep.equal(expected);
...