facebook / facebook/flow

Opting in to getter/setter usage still fails with 'Contravariant property incompatible with covariant use'

Aperta
#3,191 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Rust
Stelle
22.3k
Fork
1.9k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Flow version 0.37.4.

In the following code:

```
import appendQuery from 'append-query';
import { join } from 'path';
import TypeCastError from './errors/TypeCastError';

export type VersionableArgs = {
instanceId: string,
version: number
};

export default class Versionable {

instanceId: string;
version: number;

constructor(args: VersionableArgs) {
this.instanceId = args.instanceId;
this.version = args.version;
}

set instanceId(val: any) {
if (typeof val !== 'string') throw new TypeCastError('instanceId is expected to be a string');
this.instanceId = val;
}

toUrl(basePath: string) {
let x: string = join(basePath, this.instanceId);
return appendQuery(x, {
version: this.version
});
}

}
```

running `flow check` errors out with:

```
Potentially unsafe get/set usage. Getters and setters with side effects are potentially unsafe and disabled by default. You may opt-in to using them anyway by putting `unsafe.enable_getters_and_setters=true` into the [options] section of your .flowconfig.
```

Opting in to getter and setter usage still fails with:

```
src/Versionable.js:36
36: let x: string = join(basePath, this.instanceId);
^^^^^^^^^^^^^^^ property `instanceId`. Contravariant property `instanceId` incompatible with covariant use in
36: let x: string = join(basePath, this.instanceId);
^^^^^^^^^^^^^^^ property `instanceId`
```

`this.instanceId` is a `string` and `join` takes var args of type `string`… why does this error out?

I am side-stepping the issue with a `// $FlowIssue` comment before `join` usage.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.