如何在beforeAll测试中创建类型化变量?

Bru*_*oLM 6 mocha.js jasmine typescript jestjs

我遇到了一个常见的场景。我需要在beforeAll或每个中创建一个变量。

describe('some test', () => {
  beforeAll(() => {
    const foo = createFoo({}, {});    
  });

  it('returns something', () => {
    // how to access foo?
  });
});
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我不能访问fooit测试,因为它只存在内部的beforeAll范围。

为了能够访问我需要的地方,我必须foo在里面声明describe

describe('', () => {
  let foo;
Run Code Online (Sandbox Code Playgroud)

或使用

this.foo =
Run Code Online (Sandbox Code Playgroud)

这两种方法的问题是我丢失了类型信息。而且我没有这些函数的返回类型的显式接口。

有没有办法声明foo我以后可以访问它而不会丢失类型信息的地方?

Osc*_*ett 1

您可以使用非空断言运算符( !) 来放宽非空约束。

describe('some test', () => {
  let foo!: SomeType;
  beforeAll(() => {
    foo = createFoo({}, {});    
  });

  it('returns something', () => {
    expect(foo.bar).toBe(true);
  });
});
Run Code Online (Sandbox Code Playgroud)