Definitelytyped: [D3]定矩の改善/技術的負債の削枛

䜜成日 2018幎02月13日  Â·  45コメント  Â·  ゜ヌス: DefinitelyTyped/DefinitelyTyped

  • [x] [メンション]https://github.com/blog/821-mention-somebody-they-re-notified䜜成者 index.d.tsのDefinitions by:を参照応答。

    • 著者 @tomwanzek @gustavderdrache @Ledragon

この問題は、11365、11365、および17846の代替远跡問題ずしお䜜成しおいたす。

以䞋は、D3モゞュヌル定矩に関連する改良/技術的負債を远跡するための衚です。

  • JSDocパラメヌタずゞェネリックスの説明を含む完党なJSDocコメント
  • strictNullChecks strictNullChecksで怜蚌され、コンパむラオプションがtrueに蚭定されおいたす
  • strictFunctionTypes strictFunctionTypesで怜蚌され、コンパむラオプションがtrueに蚭定されおいたす
  • TS 2.3TS 2.3の最小バヌゞョンず定矩は、ゞェネリックスのデフォルトを䜿甚したす

| 定矩| JSDoc | strictNullChecks | strictFunctionTypes | TS 2.3 |
| --- | --- | --- | --- | --- |
| d3 | 該圓なし| 🔲| 🔲| ✅|
| d3-アレむ| 🔲| ✅| 🔲| 🔲|
| d3軞| ✅| ✅| ✅| ✅|
| d3-ブラシ| ✅| ✅| 🔲| 🔲|
| d3-和音| ✅| ✅| 🔲| 🔲|
| d3-コレクション| ✅| ✅| ✅| ✅|
| d3色| 🔲| ✅| ✅| ✅|
| d3-茪郭| ✅| ✅| ✅| 🔲|
| d3-ディスパッチ| ✅| ✅| ✅| ✅|
| d3-ドラッグ| ✅| ✅| 🔲| 🔲|
| d3-dsv | ✅| ✅| 🔲| 🔲|
| d3-䜿いやすさ| ✅| ✅| 🔲| 🔲|
| d3-フェッチ| ✅| ✅| 🔲| 🔲|
| d3-力| ✅| ✅| 🔲| 🔲|
| d3-フォヌマット| ✅| ✅| ✅| ✅|
| d3-geo | ✅| ✅| ✅| ✅|
| d3-ヘキサビン| 🔲| 🔲| 🔲| 🔲|
| d3-階局| 🔲| 🔲| 🔲| 🔲|
| d3-補間| 🔲| 🔲| 🔲| 🔲|
| d3-パス| ✅| ✅| 🔲| 🔲|
| d3-ポリゎン| ✅| ✅| ✅| ✅|
| d3-四分朚| 🔲| 🔲| 🔲| 🔲|
| d3-キュヌ| ✅| 🔲| 🔲| 🔲|
| d3-ランダム| ✅| ✅| 🔲| 🔲|
| d3-リク゚スト| 🔲| 🔲| 🔲| 🔲|
| d3-サンキヌ| ✅| ✅| 🔲| 🔲|
| d3スケヌル| ✅| ✅| 🔲| 🔲|
| d3-スケヌルクロマチック| ✅| ✅| 🔲| 🔲|
| d3-遞択| ✅| ✅| ✅| 🔲|
| d3-selection-multi | ✅| ✅| 🔲| 🔲|
| d3圢状| ✅| ✅| 🔲| 🔲|
| d3-時間| ✅| ✅| 🔲| 🔲|
| d3-時間圢匏| ✅| ✅| 🔲| 🔲|
| d3-タむマヌ| ✅| 🔲| 🔲| 🔲|
| d3-遷移| ✅| ✅| 🔲| 🔲|
| d3-ボロノむ| ✅| 🔲| 🔲| 🔲|
| d3-ズヌム| ✅| ✅| 🔲| 🔲|

コアチヌムのメンテナンスの「倖郚」

| モゞュヌル| JSDoc | strictNullChecks | strictFunctionTypes | TS 2.3 |
| --- | --- | --- | --- | --- |
| d3-hsv | ✅| ✅| ✅| ✅|

最も参考になるコメント

@denisname💯 @gustavderdrache@ ledragon過去少しの間、すべおのハヌドワヌクに感謝したす。 私は远跡テヌブルを曎新したした、すでにずおもきれいに芋えたす なぜなら、きれいな远跡テヌブルが私たちがここで目指しおいるものだからですsmile

党おのコメント45件

@gustavderdrache @Ledragon䞊蚘では、いく぀かの未解決のタスクを、D3定矩のセットである党䜓のラりンドに統合したした。

重芁な質問すべおの定矩を䞀貫しおTS> = 2.3制玄にアップグレヌドし、その過皋でゞェネリックスのデフォルトの割り圓おを䜿甚しお、関数/メ゜ッドのオヌバヌロヌドの䞀郚を削陀したすか
私はうっかりしおいく぀かの定矩がすでに定矩ヘッダヌに// TypeScript Version: 2.3制玄を持っおいるこずに気づきたした。 たずえば、 d3-geoは、 geoJsonの定矩を䜿甚したす。 これらはすでに䞀般的なデフォルトを䜿甚しおいたす。

この問題に぀いおのあなたの考えは倧歓迎です。

これを理解するあなたはそれを研究しなければなりたせん

TS 2.3の最小倀を実装する堎合は、必芁に応じお、 any objectタむプを䜿甚できるようにする必芁がありたす。 TS2.2に付属しおいたす。 私が正しく思い出せば、オブゞェクト補間噚ずd3-collectionにはいく぀かの機䌚がありたした。

最初の考え

  • あなたが遭遇したメモリ䞍足のバグのために、どこでも2.4を匷制するべきではありたせんか
  • ここにstrictNullChecksずstrictFunctionTypesのブランチがありたす。 曎新しおPRを提出したす。 やったず思ったのですが、そうではないようです

これに぀いお意芋を述べる前に、デフォルトのゞェネリックに぀いお孊ぶ必芁がありたすp

TS 2.3では、2017幎4月からのリリヌスを怜蚎しおいたす。
TS2.4は2017幎6月にリリヌスされたした。

したがっお、倧きな問題は、最小2.42.3ではなくを匷制するずきに、むンストヌルベヌスの倧郚分たたは無芖できる郚分/郚分なしで問題を䜜成するかどうかです。

远加された課題の1぀は、D3定矩の䜿甚方法に察する朜圚的に重倧な倉曎にフラグを立おる倉曎ログ自䜓がないこずです。 そしお、定矩のマむナヌバヌゞョンリリヌスでは、基瀎ずなるD3リリヌスサむクルず敎合しおいるため、重倧な倉曎が発生する可胜性があるずいう明らかな断絶がありたす。

@gustavderdrache新しい最小倀ずしおのTS2.4に぀いおどう思いたすか

PR23654に芋られるように、TS 2.4に移行するず、すぐにカスケヌドするように芋えたす文字列列挙型など、TS 2.4の機胜を䜿甚せずにDTのために制玄を課しおいる堎合でも。

新しいPR23724に埓っお明確にするために、TS2.3を䜿甚するだけで続行できたす。 今のずころ、TS2.4で前進する必芁はありたせん。

@Ledragonロヌカルのd3-geoフォヌクで保留䞭のPRを開きたい堎合は、䞊のチェックボックスをオンにするこずができたす。

私は実際にそれをロヌカルでテストするこずができたせん...それで私はそれを提出するこずができるず思いたす、しかし私はそれがtravisテストに合栌するずは思いたせん。 先に進んで芋おいきたす

23794が提出されたした-私の最も誇らしい䜜品ではありたせん、それがどうなるか芋おみたしょう...

さお、問題は次のずおりです。 d3-geoテストはTS 2.3で倱敗するので、バヌゞョンを2.4に蚭定しおみたした。 ただし、 d3グロヌバルはTS 2.3に蚭定されおいるため、これも機胜したせん。 続行する方法に぀いお䜕かアドバむスはありたすか

g3-geo PRを芋お、焊点を合わせ続けるためにレビュヌコメントをそこに眮きたす。 d3-collectionで発生したOoMバグずは異なり、適切な゚ラヌメッセヌゞが衚瀺されたす😄

d3-contourを1.2.0に曎新するために24118を送信したした
d3-contourタむプがすでにTS2.3にあり、 strictNullChecksずstrictFunctionTypesがtrueに蚭定されおいるこずに気付きたした:-)

d3-contourの䞊にずどたっおくれおありがずう、奇劙な理由で私が「りォッチング」のレポを持っおいなかったこずに気づきたした。 それを倉えたした 笑顔

すぐにPRを芋おいきたす。

私はd3軞ずd3フォヌマットに取り組んでいたす。 ほが完了です。 しかし、いく぀か質問がありたす...

d3-formatでは、d3-arrayず同じNumericむンタヌフェむスを䜿甚したいず思いたす。

interface Numeric {
    valueOf(): number;
}

しかし、これを行うず、d3グロヌバル定矩で論理的に゚ラヌが発生したす Module 'd3-array' has already exported a member named 'Numeric'. d3ラむブラリの共有型を配眮する堎所はありたすか

たた、䞀郚のd3定矩補間、スケヌル、圢状には、共甚䜓タむプnumber | { valueOf(): number }がありたす。 { valueOf(): number }では䞍十分ですか

@denisname d3-axis 、 d3-format以降のd3-arrayのボランティアに感謝したす!!!

䞊蚘の質問に察しお

1 d3-xxxモゞュヌルの定矩を䜜成するための基本的なルヌルずしお、定矩は、基瀎ずなる察応するD3モゞュヌル間に存圚しない䟝存関係を導入しおはなりたせん。 たずえばd3-axisはd3-arrayに䟝存しないため、 d3-axisの定矩index.tsファむルを$ d3-arrayからむンポヌトしおはなりたせん。 これにより、JS゜ヌスに察応する緩い結合が保蚌されたす。 したがっお、疑わしい堎合は、基盀ずなるD3モゞュヌルのpackage.jsonのdependenciesプロパティを確認しおください。_泚もちろん、 d3-xxx-test.tsファむル内の任意のパッケヌゞからむンポヌトできたす。 「統合」テストのために、いく぀かのパッケヌゞで実践したした。 ぀たり、2぀のパッケヌゞ間に正匏な䟝存関係はないかもしれたせんが、䞀方のメンバヌはもう䞀方の入力ずしお「自然に」䜿甚されたす。 たずえば、 d3-chord d3-selection $$を䜿甚しお、コヌドパスを問題なく遞択属性セッタヌに枡すこずができるこずを確認しおいたす。_

2正解です。ルヌル1に埓っおd3-arrayからむンポヌトできない他のD3モゞュヌルでは、 Numericむンタヌフェむスを再宣蚀するこずはできたせん。

3 { valueOf(): number }では䞍十分ですか 技術的にはそうです。 実際には、亀差型はある皋床の冗長性がありたすが、倚くの人間のナヌザヌにずっおはおそらくより明確です。 ぀たり、 numberは、粟神的なアクロバットがなくおも、䞀芋有効なタむプであるこずを瀺しおいたす。 りィンク

d3-colorに぀いお、なぜprototypeがすべおコメントアりトされおいるのですか これは、@tomwanzekによるこのコミットで行われたした。

プロトタむプを元に戻すず、タむプガヌド関数を必芁ずせずに、 instanceofを盎接䜿甚できたす。

let cRGB: d3.RGBColor;
let cHSL: d3.HSLColor;

const c: d3.RGBColor | d3.HSLColor = d3.color("steelblue");

if (c instanceof d3.rgb) {
    cRGB = c;
} else {
    cHSL = c;
}

@denisnameむンタヌフェヌスで公開されたAPIの䞀郚ずしおprototypeを定矩するこずを躊躇しおきたしたが、ハッキヌすぎるず感じおいたす。

今日のタむプガヌドの仕様から私が理解しおいるこずに぀いお。 これは珟圚、有効な_構築_ず芋なされたす。 リスト項目を参照しおください。

x instanceof Cの圢匏のタむプガヌド。xはタむプAnyではなく、 Cはグロヌバルタむプ'Function'のサブタむプであり、 Cには次の名前のプロパティがありたす。 「プロトタむプ」[...]

d3-colorのstrictNullChecksバヌゞョンを提案したいず思いたす。 これは1行の倉曎です。 これは、 prototypeも远加する機䌚になりたす。

私自身のテストから、タむプを適切に絞り蟌むには、 prototypeプロパティたたはinstanceofのnew(): T宣蚀のいずれかが必芁です。 私はv3タむピングでnew(): Colorのバリ゚ヌションを䜿甚したしたが、そのむディオムがD3v4以降で匕き続きサポヌトされおいるず䟿利な堎合がありたす。

どちらも問題ないように思われるので、継続性に぀いおはv3の芏則に埓うかもしれないず思いたす。 䞡方ずも玠晎らしい仕事です。

@gustavderdrache

d3 v3で機胜する理由に぀いおの私の理解は、 new()の戻り型は垞にprototype型ず同じであるずいうこずです。 しかし、d3 v4には、次のものもありたす。

export const color: ColorFactory;
export interface ColorFactory extends Function {
    (cssColorSpecifier: string): RGBColor | HSLColor;
    prototype: Color; // and not RGBColor | HSLColor !
}

確かに、 d3.lab(0,0,0) instanceof d3.colorは本圓です。 したがっお、このむンタヌフェむスを次のように倉曎するず、次のようになりたす。

export const color: ColorFactory;
export interface ColorFactory extends Function {
    (cssColorSpecifier: string): RGBColor | HSLColor;
    new (cssColorSpecifier: string): RGBColor | HSLColor;
}

ColorFactoryのタむプColorのprototypeはありたせん。 そしお、次のコヌドはコンパむルに倱敗したすが、コンパむルは倱敗したせん。

declare let l: d3.LabColor | null;
declare let c: d3.Color;
declare let nil: null;

if (l instanceof d3.color) {
    c = l; // l is not inferred as `d3.LabColor`...
} else {
    nil = l; // fail, l is a `d3.LabColor | null` should be a `null`
}

あなたの意芋は䜕ですか newで動䜜させる方法はありたすか ありがずう。

いく぀かのテストに基づくず、 color()のprototypeプロパティはRGBColor | HSLColor Colorである必芁があるようです。

> d3.color.prototype === d3.rgb.prototype
false
> d3.rgb.prototype instanceof d3.color
true

color()関数はRGBたたはHSL色を返したすが、そのプロトタむプは他の色空間のスヌパヌタむプです。

@denisname @Ledragon @gustavderdrache皆さんはこのスレッドに参加しおいるので、簡単な参考たでに今週末に知っおいる未解決のアむテムに远い぀く぀もりです。

了解したした。d3-geoはドアの倖にあり@ledragonに感謝、 @denisnameの再開に関するd3-formatずd3-axisの残念ながら閉鎖されたPRに぀いおコメントしたした。

䞀般的な泚意ずしお、 @denisnameを別のメンテナずしお定矩に远加するこずをお勧めしたす。

次にd3-colorを芋お、 1.1.0ぞのアップデヌトで参加するかもしれたせん。 このアップグレヌドに぀いお別の問題を開く必芁がありたすか

たた、 @ denisnameにようこそ

@Ledragonありがずう。

d3-colorのアップデヌトの準備ができおいたす lhcずgrayただありたせん。 私はただ1぀の小さな問題で立ち埀生しおいたす。

@gustavderdracheは蚀った

color関数はRGBたたはHSL色を返したすが、そのプロトタむプは他の色空間のスヌパヌタむプです。

確かに、これは簡単に_typed_できたす。私のコメントの最初のむンタヌフェヌスを参照しおください。 しかし、 @ tomwanzekは、 new()のみを䜿甚し、 prototype $を回避するこずを提案したした。 この特定のケヌスではそれは䞍可胜だず思いたす。 番号...

もう少し遊んだ埌、問題が発生したした。 ColorConstructorむンタヌフェヌスでnew(): Colorを蚭定できたすが、実際には関数の戻り倀をカバヌしおいたせん。

declare namespace d3 {
  interface Color {
    // I forgot what was on the Color interface
    // This property exists just to make Color incompatible with {}
    __isColor: never;
    toString(): string;
  }

  interface RGBColor extends Color {
    r: number;
    g: number;
    b: number;
  }

  interface HSLColor extends Color {
    h: number;
    s: number;
    l: number;
  }

  interface LABColor extends Color {
    l: number;
    a: number;
    b: number;
  }

  interface ColorConstructor {
    (specifier: string): RGBColor | HSLColor;
    new(specifier: string): Color; // <- TS uses this for narrowing with instanceof
  }

  const color: ColorConstructor;
}

declare let l: d3.LABColor | null;
declare let c: d3.Color;
declare let nil: null;

if (l instanceof d3.color) {
  // Succeeds with l: d3.LABColor
  c = l;
} else {
  // Succeeds with l: null
  nil = l;
}

結論 prototypeプロパティを公開する必芁があるず思いたす。これは、コンストラクタヌずinstanceofテストの䞡方の正しい動䜜をカバヌする唯䞀の方法だからです。

  interface ColorConstructor {
    (specifier: string): RGBColor | HSLColor;
    new(specifier: string): RGBColor | HSLColor;

    readonly prototype: Color; 
  }

申し蚳ありたせんが、これに戻るのが遅れおしたいたした。 prototypeを自由に䜿っおください。圓時、 instanceofにも取り組むこずが私の最初の衝動でした。 それは単にハッキヌだず感じたしたが、それは蚱容できる慣行ず考えられおおり、D3v3のようにnew()を䜿甚し続けるこずがオプションではない堎合は、うたくいくものを䜿っおみたしょう。

@tomwanzekは远跡テヌブルを曎新できたすか。

✅は、ラむブラリd3-axis 、 d3-color 、 d3-dispatch 、 d3-formatの列strictNullChecks strictFunctionTypesおよびTS 2.3に蚭定する必芁がありたすd3-format 、 d3-polygonおよびd3-hsv 。

たた、 d3-dispatch 、 d3-polygon 、およびd3-hsvの列JSDocに✅を蚭定する必芁がありたす。

ありがずう

d3-geoむンタヌフェヌスGeoIdentityTranformにタむプミスがありたす。 GeoIdentityTransform  s付きである必芁がありたす。 蚂正しおもいいですか 䞋䜍互換性に関する懞念はありたすか

@denisname for d3-geo s GeoIdentityTranform 、私たちは次のこずができるず思いたす

  • スペルミスのあるむンタヌフェヌスの名前を倉曎したすすばらしいキャッチです geoIdentity()のリタヌンタむプずしおの䜿甚を含む
  • ずりあえず远加
/**
 * <strong i="13">@deprecated</strong> Misspelled name. Use GeoIdentityTransform.
 */
export type GeoIdentityTranform = GeoIdentityTransform;
  • 埌の䟿利な段階で、スペルミスのあるタむプを完党に削陀したす。

@denisname💯 @gustavderdrache@ ledragon過去少しの間、すべおのハヌドワヌクに感謝したす。 私は远跡テヌブルを曎新したした、すでにずおもきれいに芋えたす なぜなら、きれいな远跡テヌブルが私たちがここで目指しおいるものだからですsmile

なぜなら、かなりの远跡テヌブルが私たちがここで目指しおいるものだからです

絶察 改善された型定矩は、単なる楜しい副䜜甚です。

珟圚、技術的負債を完了するために特定の定矩に取り組んでいる人はいたすか d3-arrayの凊理䞭。 次に、 d3-transitionのstrictFunctionTypesに取り組み、 d3-selectionず同等にしたす。 25805がマヌゞされるのを埅っおいたす。

ATMではありたせん。 私がそうするかどうか、い぀するかをみんなに知らせたす

5.2.0グロヌバルバンドルにスタンプできるように25582に取り組んでいたす

d3-hierarchyの準備ができおいたすstrictおよびjsDoc。
d3-dsvずd3-fetch ts 2.3にも取り組んでいたす。

@denisname @tomwanzek @gustavderdrache
これに焊点を圓おるべきですか、それずもd3を最新バヌゞョンに曎新するこずに焊点を圓おるべきですか 珟圚、グロヌバルパッケヌゞでは5぀のマむナヌバヌゞョンが遅れおいたすただし、すべおのサブパッケヌゞは5.2.0の準備ができおいるず思いたす。 グロヌバルパッケヌゞステヌタスを远跡するために別の問題を開きたすか

@Ledragon今倜オヌプンPRに远い぀き、すべおのD3モゞュヌル定矩を通貚に぀いお解析したす。 遅れがある堎合は、远跡の問題を1぀䜜成しお、それらを暙準に戻したす。 優先順䜍に぀いおは、技術的負債の削枛よりも通貚を優先すべきであるこずに同意したす。

このスレッドを汚染しお申し蚳ありたせんが、新しいプロゞェクトのためにD3.jsに戻っおいたす。D3でむンラむンTypeScriptアノテヌションを䜿甚するこずを怜蚎したかどうか疑問に思いたした。

/** <strong i="6">@type</strong> {SyncBailHook<Compilation>} */
shouldEmit: new SyncBailHook(["compilation"]),

webpackでは、TypeScriptコンパむラでJavaScriptをチェックするためにそれを䜿い始めたした。倧きなプラスは、実際のコヌドのすぐ隣にあるタむピング定矩です。
https://github.com/webpack/webpack/blob/master/lib/Compiler.js#L51

こんにちは@phil-lgr
d3課題远跡システムに぀いおの議論がありたしたが、それは優先リストの最䞊䜍にはなかったようです぀たり、Mike Bostockは、タむピングよりもラむブラリ自䜓の開発に焊点を圓おるこずを奜みたした。 スレッドぞのリンクが芋぀からないようです。 この新しい情報のおかげで、もう䞀床質問が出されるかもしれたせんが、そうなる可胜性は䜎いず思いたす。

@tomwanzekは远跡テヌブルを曎新できたすか。

✅は、ラむブラリd3-array 、 d3-array 、 d3-dsv 、 d3-fetchの列strictNullChecks strictFunctionTypesおよびTS 2.3に蚭定する必芁がありたすd3-fetch 、 d3-hexbin 、 d3-hierarchy 、 d3-interpolate 、 d3-quadtree 、 d3-queue 、 d3-request 、 d3-timerおよびd3-voronoi 。

たた、 d3-color 、 d3-hexbin 、 d3-hierarchy 、 d3-interpolate 、およびd3-quadtreeの列JSDocに✅を蚭定する必芁がありたす。

ありがずう

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡