Skip to content

Commit

Permalink
add saji notable
Browse files Browse the repository at this point in the history
  • Loading branch information
sajikix committed May 21, 2024
1 parent a12e093 commit 854f2c1
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions src/content/posts/2024/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,45 @@ React Compiler は一般的な JavaScript のセマンティクスと [Rules of

---

### [xxx](https://example.com)
### [About "slow types" - Docs - JSR](https://jsr.io/docs/about-slow-types)

- 共有者: @xxxx
- 共有者: @sajikix

新しいパッケージレジストリである JSR では「明示的に記述されていない型」や、「理解するために広範な推論を必要とするほど複雑な型」を `slow types`としてマークし、このようなような型を利用していないかをチェックするようにしているという記事です。

#### `slow types` の問題

JSR ではドキュメントの自動生成や npm 互換の型宣言生成のために多くの型解析を行っており、推論コストの高い型が含まれると以下のような問題が発生します。

- 多くのパッケージで 1.5~2 倍近い解析時間がかかる
- 一部 npm 互換の型宣言生成が行えない場合がある
- 型からドキュメントを生成することができない場合がある

またそもそも完全に TypeScript の型推論を行うことができるのは`TypeScript compiler(tsc)`のみで、この tsc の複雑な推論機能は頻繁にアップデートされます。自動的に型宣言やドキュメントを生成する JSR にとって、明示的でなく型推論の必要な型を利用することは生成物の冪等性を保証できないことにつながります。このような理由から、JSR では `slow types` を使用せず明示的に型をつけることを推奨しており、これを Scoring にも反映させています。

詳しくはこの記事について言及した github issue も詳しいです。

- https://github.com/jsr-io/jsr/issues/444#issuecomment-2079772908

#### 何が `slow types` なのか

では具体的に `slow types` はどのようなものが該当するのでしょうか。JSR においては export されている関数、クラス、const, let に 明示的な型記述がない場合や、型が単純に推測できるものより複雑な場合に `slow types` としてマークされます。(内部的に import/export しているもので明示的な型記述がないものは JSR としては`slow types`としていません。`slow types`はあくまで外部に export されている変数や関数・オブジェクトの推論の難しさに焦点を当てています。)

例えば返り値の方を方を明示していない関数や初期化部分を参照しないと算出できないプロパティやメソッドなどが該当します。

```ts
export function foo() {
return Math.random().toString()
}
```

またパッケージはグローバル・スコープや他のモジュールを拡張するために、`declare global``declare module``export as namespace` を使用することはできないなどの制約もあります。

#### `slow types` を防ぐ

deno-lint を利用している環境では `no-slow-types` というルールによって意図しない slow types の発生を防ぐことができるとしています。

また必ずしも`slow types` を防げるとは限りませんが、同じような思想から考案された [`--isolatedDeclaration option`](https://devblogs.microsoft.com/typescript/announcing-typescript-5-5-beta/#isolated-declarations)が TypeScript 5.5 で導入されています。

---

Expand Down

0 comments on commit 854f2c1

Please sign in to comment.