facebook / facebook/flow

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

オープン
#3,191 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Rust
スター
22.3k
フォーク
1.9k
PR マージ指標
30日以内にマージされた PR はありません

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。