質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

受付中

JotaiというTypescriptライブラリの一部ソースコードで関数重複エラーにならない原理がわかりません。

tokatu
tokatu

総合スコア4

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

2回答

1リアクション

0クリップ

240閲覧

投稿2022/09/11 14:50

前提

JotaiというTypeScriptのライブラリがあり、中身を読み始めてみたのですが、
調べても仕組みが分からない点があり、ご存じの方がおられましたら教えていただきたいです。

聞きたいこと

atomの関数が複数あるのですが、エラーにならない原理がわかりません。
関数が重複しているエラーが出ると思うのですが、何故問題ないのでしょうか?

対象ソース
src/core/atom.ts
https://github.com/pmndrs/jotai

該当のソースコード

typescript

// writable derived atom export function atom<Value, Update, Result extends void | Promise<void> = void>( read: Read<Value>, write: Write<Update, Result> ): WritableAtom<Value, Update, Result> // read-only derived atom export function atom<Value>(read: Read<Value>): Atom<Value> // invalid function in the first argument export function atom(invalidFunction: (...args: any) => any, write?: any): never // write-only derived atom export function atom<Value, Update, Result extends void | Promise<void> = void>( initialValue: Value, write: Write<Update, Result> ): WritableAtom<Value, Update, Result> & WithInitialValue<Value> // primitive atom export function atom<Value>( initialValue: Value ): PrimitiveAtom<Value> & WithInitialValue<Value> export function atom<Value, Update, Result extends void | Promise<void>>( read: Value | Read<Value>, write?: Write<Update, Result> ) { const key = `atom${++keyCount}` const config = { toString: () => key, } as WritableAtom<Value, Update, Result> & { init?: Value } if (typeof read === 'function') { config.read = read as Read<Value> } else { config.init = read config.read = (get) => get(config) config.write = (get, set, update) => set(config, typeof update === 'function' ? update(get(config)) : update) } if (write) { config.write = write } return config }
attakei👍を押しています

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

tokatu

2022/09/12 02:49

なるほど、、知らなかったです、確認不足でした。 助かりました、ご回答ありがとうございます!

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。