Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(core): add Opt type as an alternative to OptionalProps symbol #4753

Merged
merged 1 commit into from Sep 27, 2023

Conversation

B4nan
Copy link
Member

@B4nan B4nan commented Sep 27, 2023

import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@Entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): string & Opt {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}

@codecov
Copy link

codecov bot commented Sep 27, 2023

Codecov Report

All modified lines are covered by tests ✅

Files Coverage Δ
packages/core/src/typings.ts 100.00% <ø> (ø)

📢 Thoughts on this report? Let us know!.

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  // highlight-next-line
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  // highlight-next-line
  get fullName(): string & Opt {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
@B4nan B4nan merged commit a815160 into v6 Sep 27, 2023
5 checks passed
@B4nan B4nan deleted the opt-type branch September 27, 2023 19:34
B4nan added a commit that referenced this pull request Sep 28, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Sep 28, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Sep 30, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
@B4nan B4nan mentioned this pull request Sep 30, 2023
22 tasks
B4nan added a commit that referenced this pull request Oct 2, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Oct 17, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Oct 21, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Oct 25, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Nov 2, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
B4nan added a commit that referenced this pull request Nov 5, 2023
#4753)

The `Opt` type can be used in two ways:

- generics: `middleName: Opt<string> = '';`
- intersection: `middleName: string & Opt = '';`

```ts
import { Opt, Entity, PrimaryKey, Property } from '@mikro-orm/core';

@entity()
class User {

  @PrimaryKey()
  id!: number;

  @Property()
  firstName!: string;

  @Property()
  middleName: string & Opt = '';

  @Property()
  lastName!: string;

  @Property({ persist: false })
  get fullName(): Opt<string> {
    return `${this.firstName} ${this.middleName} ${this.lastName}`;
  }

}
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant