TypeScript part4 (378レス)
TypeScript part4 http://mevius.5ch.net/test/read.cgi/tech/1640872622/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
165: デフォルトの名無しさん [] 2022/06/29(水) 20:00:27.28 ID:NKfPTkof 質問です。 type t = (a: string) => string; const f: t = (a) => false; console.log(f('x')); で false のところで、 Type 'boolean' is not assignable to type 'string'.ts(2322) になりますが、 ・type t = ... を書き換えてはいけない ・const f の実装を const f: t = (a) => <string><unknown>false; のように書き換えてはいけない ・// @ts-ignore を使ってはいけない。 という縛りで、例えばですが、 type t = (a: string) => string; overwrite type t = (a: string) => string | boolean; const f: t = (a) => false; console.log(f('x')); のように同名の型のまま戻り値の定義を書き換えるということはできるのでしょうか? (overwrite type...は、そんな文法は無く、仮想の方法です。) また、型定義と型指定部分だけ書き換え不可としたら、普通は、 <string><unknown>false; // @ts-ignore どちらで乗り切るのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1640872622/165
166: デフォルトの名無しさん [sage] 2022/06/30(木) 01:29:29.02 ID:9mtgPMTA >>165 普通はfの型をtにしないと思うのだが、どういう意図があるの? http://mevius.5ch.net/test/read.cgi/tech/1640872622/166
167: デフォルトの名無しさん [sage] 2022/06/30(木) 07:51:24.33 ID:dQhuKSOV >>165 >のように同名の型のまま戻り値の定義を書き換えるということはできるのでしょうか? 型定義を後付けで変更できたらいろんな前提がひっくり返る気が そんなことが必要な状況が想像できないけどコードの臭いがプンプンする http://mevius.5ch.net/test/read.cgi/tech/1640872622/167
169: デフォルトの名無しさん [] 2022/06/30(木) 11:29:36.59 ID:Argu0lpR >>165 です。ありがとうございます。 実際のケースでお話しします。 ・ライブラリの型を利用している。 ・ライブラリの実装をそのまま真似ている。(実装は変えられる。) ・anyは使わない方針。 の状況です。 【型定義(サードパーティ)】 declare const visit: { <V extends Node>(tree: Node,test: Test<V> | Array<Test<any>>,visitor: visit.Visitor<V>,reverse?: boolean): void } export = visit declare namespace unistUtilIs { type TestFunction<T extends Node> = (node: unknown,index?: number,parent?: Parent) => node is T type Test<T extends Node> = TestFunction<T> | null | undefined } 【実装(大部分省略)】 import visit from 'unist-util-visit'; import { Node, Data } from 'unist'; function visitX(node: any): void { if (!node.type) return; } return function transformer(tree): void { visit(tree, (node: Node<Data>) => node.type === 'xxx', visitX); }; ここで、function visitX(node: any) の Unexpected any. を消すのに難儀しています。 function visitX(node: Node<Data>): void { にすると、 visit( の部分で No overload matches this call. Overload 1 of 2, '(tree: Node<Data>, test: any[] | Test<Node<Data>>, visitor: Visitor<Node<Data>>, reverse?: boolean | undefined): void', gave the following error. ... と怒られます。極端な話、サードパーティの定義の方をいじらないと解決しないかもと思った次第です。 http://mevius.5ch.net/test/read.cgi/tech/1640872622/169
171: デフォルトの名無しさん [] 2022/06/30(木) 12:53:38.41 ID:Argu0lpR >>165 です。 すみません。かなり省略して、改行も削除しました。 伝えたかったのは、以下です。 https://tsplay.dev/WJyrDm http://mevius.5ch.net/test/read.cgi/tech/1640872622/171
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s