facebook / facebook/flow

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

Aberta
#3,191 2 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Rust
Estrelas
22.3k
Forks
1.9k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

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.

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.