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

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

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

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

Q&A

2回答

811閲覧

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

tokatu

総合スコア4

TypeScript

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

1グッド

0クリップ

投稿2022/09/11 14:50

前提

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

聞きたいこと

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

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

該当のソースコード

typescript

1// writable derived atom 2export function atom<Value, Update, Result extends void | Promise<void> = void>( 3 read: Read<Value>, 4 write: Write<Update, Result> 5): WritableAtom<Value, Update, Result> 6 7// read-only derived atom 8export function atom<Value>(read: Read<Value>): Atom<Value> 9 10// invalid function in the first argument 11export function atom(invalidFunction: (...args: any) => any, write?: any): never 12 13// write-only derived atom 14export function atom<Value, Update, Result extends void | Promise<void> = void>( 15 initialValue: Value, 16 write: Write<Update, Result> 17): WritableAtom<Value, Update, Result> & WithInitialValue<Value> 18 19// primitive atom 20export function atom<Value>( 21 initialValue: Value 22): PrimitiveAtom<Value> & WithInitialValue<Value> 23 24 25export function atom<Value, Update, Result extends void | Promise<void>>( 26 read: Value | Read<Value>, 27 write?: Write<Update, Result> 28) { 29 const key = `atom${++keyCount}` 30 const config = { 31 toString: () => key, 32 } as WritableAtom<Value, Update, Result> & { init?: Value } 33 if (typeof read === 'function') { 34 config.read = read as Read<Value> 35 } else { 36 config.init = read 37 config.read = (get) => get(config) 38 config.write = (get, set, update) => 39 set(config, typeof update === 'function' ? update(get(config)) : update) 40 } 41 if (write) { 42 config.write = write 43 } 44 return config 45}
attakei👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokatu

2022/09/12 02:49

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

回答2

0

オーバーロード関数という概念でした。ご回答ありがとうございました。
https://typescriptbook.jp/reference/functions/overload-functions

投稿2022/09/12 02:51

tokatu

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

言語仕様としてできることだから
以外の回答が思い浮かびません。

投稿2022/09/12 01:30

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問