小编Flo*_*dis的帖子

打字稿:覆盖扩展接口中的字段

我有一个扩展 2 个其他接口的接口。

除了一件事外,新接口是相同的:字段 '_id' 应该是字符串而不是 ObjectId(为了更容易的服务器端操作)。

是否可以覆盖新界面中的字段类型?当我这样做时,tslint 告诉新接口没有正确扩展以前的接口。

我也想避免联合类型,例如: _id : ObjectId | string

export interface AchievementDb {
    _id: ObjectID; 
    title: string;
    description: string;
    // more stuff
}

export interface AchievementUserProgress {
    _id: ObjectID;
    progress: number;
    status: UserAchievementStatus;
    // more stuff
}

export interface AchievementFull extends AchievementDb, AchievementUserProgress {
    _id: string;
}
Run Code Online (Sandbox Code Playgroud)

interface typescript

4
推荐指数
2
解决办法
2206
查看次数

Cypress:在第一次失败时中断所有测试

如何在第一次测试失败时中断所有赛普拉斯测试?

我们正在使用 semaphore 为每个 PR 使用 Cypress 启动完整的 e2e 测试。但这需要太多时间。

我想在第一次测试失败时中断所有测试。

获取完整的错误是每个开发人员在开发时的工作。如果在部署之前有任何问题,我只想尽快得到通知,而不必等待完整的测试完成。

到目前为止,我想出的唯一解决方案是使用 Cypress 中断对当前规范文件的测试。

afterEach(() => {
        if (this.currentTest.state === 'failed') {
            Cypress.runner.end();
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这还不够,因为它只中断位于规范文件中的测试,而不是所有其他文件。我今天对这个问题做了一些深入的搜索,这似乎不是 Cypress 的事情。

所以我正在尝试其他解决方案。

1:带信号量

fail_fast:
  stop:
    when: "true"
Run Code Online (Sandbox Code Playgroud)

它应该在出错时中断脚本。但它不起作用:测试在出错后继续运行。我的猜测是 Cypress 只有在所有测试都完成后才会抛出错误。

2:也许随着脚本启动 Cypress,但我没有想法现在这里是我的脚本

"cy:run": "npx cypress run",
"cy:run:dev": "CYPRESS_env=dev npx cypress run",
"cy:test": "start-server-and-test start http-get://localhost:4202 cy:run"
Run Code Online (Sandbox Code Playgroud)

semaphore e2e-testing cypress

4
推荐指数
3
解决办法
4089
查看次数

打字稿:可以使用枚举作为函数参数类型吗?

简单的问题,但我有疑问,找不到答案。

假设你有这个枚举:

export enum fooEnum {
    Foo = 'foo',
    Bar = 'bar'
}
Run Code Online (Sandbox Code Playgroud)

那么这样输入我的函数参数可以吗?意思是'我希望收到一个字符串 'foo' 或 'bar' 作为参数并期望返回 'foo' 或 'bar'

function doStuff(myParam: FooEnum): FooEnum {
    return myParam;
};
Run Code Online (Sandbox Code Playgroud)

enums typescript

3
推荐指数
1
解决办法
4313
查看次数

定义接口:具有未知数量和属性名称的对象

我有一个对象 foo

interface Foo {
    fooId: string;
    otherStuff: any;
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个对象 fooCollection,它是一个包含未定义数量的 foos 的对象。每个属性都是一个等于 fooId 的字符串。如何为 fooCollection 定义准确的接口?

到目前为止,我想出了这个:

interface FooCollection {
    [key: string]: Foo;
}
Run Code Online (Sandbox Code Playgroud)

- 我怎么能告诉 ts 财产的数量可以是任何东西?

- 我可以更准确地说明道具名称,说它是 fooId 而不是任何字符串吗?

interface typescript

3
推荐指数
1
解决办法
2302
查看次数

具有各种接口的打字稿联合类型

我正在尝试定义一个包含对象的对象模型。该对象可以是两种不同类型的对象。

export interface EventParams {
    evtType: string;
    evtData: FaultOrGoalData| SwapData;
}

export interface FaultOrGoalData {
    evtName: string;
    player: string;
    position: string;
}

export interface SwapData {
    swapPlayer: string;
}
Run Code Online (Sandbox Code Playgroud)

我在这里的问题是ts lint告诉我,不可能访问封装对象中包含的数据。

例: params.evtData.evtName

因此,我的问题是:是否可以使用接口创建联合类型?

typescript tslint union-types

2
推荐指数
1
解决办法
223
查看次数