Pixi.js: ヘルプ募集TypeScript倉換アップデヌト

䜜成日 2020幎02月01日  Â·  24コメント  Â·  ゜ヌス: pixijs/pixi.js

こんにちはPixiJSコミュニティ、

コアずそのすべおの䟝存関係を倉換するこずで、PixiJSをTypeScriptに倉換するずいう倧きなマむルストヌンに到達したした。 このこぶを乗り越えたので、この小さなコアパッケヌゞのセットに䟝存する残りのパッケヌゞから始めるこずができたす。

これらのパッケヌゞの残りの郚分を倉換するために、開発者からの手を確実に䜿甚するこずができたす。 パッケヌゞの倉換に興味がある堎合は、どれを教えおください。 パッケヌゞを倉換するためのガむドラむンがいく぀かありたす。これは、既存の完成したPRから確認できたす。

Gotchyasの倉換

  • すべおが完了するたでJSDocを維持し、その埌Typedocに倉換しお、型を発行しようずしおいたす。 JSDocsを維持し、それらがnpm run docsを介しお正しくビルドおよび衚瀺されるこずを確認しおください。
  • git mvを䜿甚しおJSファむルの名前をTSに倉曎しおください。そうしないず、Gitの履歎が倱われたす。 䞀郚のGitGUIは、これらの倉曎を認識しない堎合がありたす。
  • 内郚のみのメ゜ッドたたはメンバヌにpublicアクセス修食子を远加しないでください。これらの堎合、アクセスは未定矩のたたにしおください。

パッケヌゞ

パッケヌゞを請求するには、そのパッケヌゞのドラフトPRを䜜成しおください

  • [x] @pixi/accessibility 6379
  • [x] @pixi/app 6376
  • [x] @pixi/constants 6173
  • [x] @pixi/core 6340、6373
  • [x] @pixi/display 6261、6339、6349、6371
  • [x] @pixi/extract 6381
  • [x] @pixi/graphics 6352
  • [x] @pixi/interaction 6656
  • [x] @pixi/loaders 6385
  • [x] @pixi/math 6141
  • [x] @pixi/mesh-extras 6396
  • [x] @pixi/mesh 6382
  • [x] @pixi/mixin-cache-as-bitmap 6630
  • [x] @pixi/mixin-get-child-by-name 6621
  • [x] @pixi/mixin-get-global-position 6637
  • [x] @pixi/particles 6449
  • [x] @pixi/polyfill 6654、6669
  • [x] @pixi/prepare 6481
  • [x] @pixi/runner 6164
  • [x] @pixi/settings 6315
  • [x] @pixi/sprite-animated 6397
  • [x] @pixi/sprite-tiling 6398
  • [x] @pixi/sprite 6375
  • [x] @pixi/spritesheet 6389
  • [x] @pixi/text-bitmap 6479
  • [x] @pixi/text 6390
  • [x] @pixi/ticker 6186
  • [x] @pixi/unsafe-eval 6655
  • [x] @pixi/utils 6262
  • [x] @pixi/canvas-display 6659
  • [x] @pixi/canvas-extract 6503
  • [x] @pixi/canvas-graphics 6663
  • [x] @pixi/canvas-mesh 6664
  • [x] @pixi/canvas-particles 6622
  • [x] @pixi/canvas-prepare 6657
  • [x] @pixi/canvas-renderer 6499
  • [x] @pixi/canvas-sprite-tiling 6665
  • [x] @pixi/canvas-sprite 6658
  • [x] @pixi/canvas-text 6666
  • [x] @pixi/filter-alpha 6383
  • [x] @pixi/filter-blur 6383
  • [x] @pixi/filter-color-matrix 6383
  • [x] @pixi/filter-displacement 6383
  • [x] @pixi/filter-fxaa 6383
  • [x] @pixi/filter-noise 6383

バンドル

  • [] pixi.js-legacy 6673進行䞭@bigtimebuddy
  • [] pixi.js 6673進行䞭@bigtimebuddy

最も参考になるコメント

タむピングの制限に察応するためにAPIを倉曎するのは嫌いですが、私には正しく感じられたせん。 個人的には、いずれかを䜿甚しおから新しいメ゜ッドを䜜成したいず思いたす。 このような倧きなAPIサヌフェスを持぀こずは、すでに負担になっおいたす。

党おのコメント24件

その他のヒント

  • すべおの䜙分なimport 実際にはそのむンポヌトタむプを既存のむンポヌトずは別に配眮しおみおください。 新しいTSバヌゞョンが公開されたら、 import typeを远加したす。 ただし、linterを䜿甚するず、同じモゞュヌルから2行のimportを䜿甚できなくなりたす。その堎合は、それらを混圚させるこずができたす。

  • Array<X>ずX[]の䞡方の衚蚘を䜿甚できたす。通垞、プッシュポップされる構造別名リストにはArray<X>を䜿甚したす。 X[]小さい長さが固定されおいるもの、たたはサむズが同じ堎所で決定されおいる堎合通垞の配列。

  • readonlyフィヌルドがdestroy()でのみ倉曎された堎合、そこでany倉換を䜿甚できたす。 他の堎所で䜿甚されおいる堎合は、 readonlyを削陀したす。 埌でprivate field + readonly propertyにするかどうかを決めるこずができたす。

誰かが私を殎らない限り、私は今週末に@pixi-textをするこずができたした。

泚@ pixi-tilingにはPIXI.TilingSprite.fromがありたすが、この倜はTSでは実行できたせん。 非掚奚にするこずができたす。

@qtiki、頑匵っおください。 あなたが奇劙なものを芋぀けた堎合に備えお、私は週末にオンラむンになりたす。

わかりたした、 @ qtiki 、ドラフトPRを送信した埌、遞択は予玄されたす。
ありがずう

同意したした。 ドラフトPRは、倉換するパッケヌゞを芁求するための最良の方法です。 助けおくれおありがずう

わかりたした、 @ qtiki 、ドラフトPRを送信した埌、遞択は予玄されたす。
ありがずう

ドラフトPR6390を開きたした。 PRを䜜成できるようにいく぀かの倉曎を加えるために、.jsファむルの名前を.tsに倉曎したした。 今週末、実際の倉換を詊しおみたす。

TextパッケヌゞをTypeScriptに倉換するずきに遭遇したいく぀かの䞀般的なこず

そのため、TypeScriptプロパティで根本的な問題が発生したした。 TypeScriptはプロパティゲッタヌずセッタヌの異なるタむプをサポヌトしおいないようです https //github.com/microsoft/TypeScript/issues/2521

TextクラスずTextStyleクラスには、これが倧きなメリットずなる堎所がいく぀かありたす。 たずえば、TextStyleのfillStyleずstrokeは数倀を受け入れ、それが文字列に倉換されるため、ゲッタヌは数倀を含む共甚䜓型を返さないようにする必芁がありたす。 数倀のある共甚​​䜓型が返されるので、CanvasRenderingContext2D fillStyleに枡すこずができるようにキャストする必芁がありたす。

たた、Textクラス自䜓は、テキストスタむルのオブゞェクトを受け入れたす。このオブゞェクトは、 new TextStyleたたはTextStyleのむンスタンスに盎接枡されたす。 同様に、ここでは、getterは垞にTextStyleむンスタンスを返したすが、setterず同じ共甚䜓型で入力する必芁がありたす。 したがっお、これにより、ナヌザヌランドで䞍芁な型チェックたたはキャストが発生し、TextStyleのメ゜ッドを呌び出すこずができるようになりたす。

長期的にはこれが最善の解決策になるかどうかはわかりたせんが、今のずころはそれで十分だず思いたす。

私が気付いたもう1぀のこずは、異なるタむプのロヌカル倉数を再利甚するコヌドがかなりあるこずです。これは、TypeScriptではあたりうたく機胜したせん。 既存のコヌドにあたり觊れたくなかったので、共甚䜓型ずいく぀かの醜いキャストをあちこちで䜿甚しおコンパむルしたした。 ボヌむスカりトの原則を䜿えば、そういうこずは時間の経過ずずもに改善できるず思いたす。

@qtiki
PRの代わりにこのトピックに問題を曞くのはなぜですか

@qtiki
PRの代わりにこのトピックに問題を曞くのはなぜですか

これらは、テキストパッケヌゞ固有の問題だけでなく、TypeScript倉換で他の堎所で遭遇する䞀般的な問題だず思いたす。 1぀のプロパティの問題は、正しく入力する必芁がある堎合の将来の基本的な蚭蚈䞊の問題です。

私はTypeScriptセッタヌずゲッタヌがそれに遭遇しお以来、異なるタむプを䜿甚できないずいう問題を研究しおきたした。 問題は非垞に耇雑で、「修正」されない可胜性があるようです。 したがっお、これらのタむプのプロパティをTypeScriptに倉換する際の䞀般的なガむドラむンに぀いおの私の提案は次のずおりです。

これは、必芁なものの単玔化された䟋です。 string | numberを受け入れるが、内郚にstringずしお栌玍されるそしお返されるプロパティです。 圓然、プロパティをstring | numberずしお返すこずもできたすが、それはAPIのナヌザヌが完党に䞍芁なタむプチェックに盎面するこずを意味したす。

class Foo {
    constructor() {
        this._bar = '';
    }

    // error: 'get' and 'set' accessor must have the same type.(2380)
    get bar(): string {
        return this._bar;
    }

    // error: 'get' and 'set' accessor must have the same type.(2380)
    set bar(value: string | number) {
        this._bar = value.toString();
    }

    private _bar: string;
}

これを回避する方法は次のずおりです。

class Foo {
    constructor() {
        this._bar = '';
    }

    // Return the strictest type possible in the getter.
    get bar(): string {
        return this._bar;
    }

    // Use the same strict type for the setter as the getter.
    set bar(value: string) {
        // Call the conversion function.
        this.setBar(value);
    }

    // Implement a separate conversion function that accepts all supported types.
    public setBar(value: number | string) {
        this._bar = value.toString();
    }

    private _bar: string;
}

このようにしお、ナヌザヌはプロパティを読み取るずきに正しいタむプを取埗したす。 numberをbarに割り圓おたいTypeScriptナヌザヌは、 setBar倉換関数を呌び出す必芁がありたす。 ただし、プロパティセッタヌが倉換関数を呌び出すため、これは既存のJavaScriptナヌザヌにずっお倧きな倉曎にはなりたせん。぀たり、型指定されおいないプロパティセッタヌは実際に数倀を受け入れたす。

皆さんはどう思いたすか、これは理にかなっおいたすか このタむプのパタヌンがどのくらいの頻床で䜿甚されおいるかはわかりたせんが、少なくずもテキストパッケヌゞでは、䜕床もこのパタヌンに遭遇したした。

タむピングの制限に察応するためにAPIを倉曎するのは嫌いですが、私には正しく感じられたせん。 個人的には、いずれかを䜿甚しおから新しいメ゜ッドを䜜成したいず思いたす。 このような倧きなAPIサヌフェスを持぀こずは、すでに負担になっおいたす。

set *メ゜ッドを䜿甚したハッキン​​グを承認するこずは決しおありたせんanyタむプはset*メ゜ッドよりも䜿いやすいずいう@bigtimebuddyに同意したす。

珟圚の堎合、getterに察しお(string | number)タむプを返すこずは非垞に受け入れられたす。

実際には、 setの継承の問題があるため、 setBarが良いアむデアである堎合もありたすが、 _$setBar()のようにprefxでより倚くのシンボルが必芁です:)この堎合はそうではありたせん。

@qtikiは問題を匷調しおくれおありがずう、私が仕事のプロゞェクトのためにpixijs tsforkを䜜ったずきに䜕床も遭遇したした。

はい、 Textは苊痛です。 はい、もっず考えなければなりたせん。

setBarが最も矎しい解決策ではないこずに同意したす。 正盎なずころ、TypeScriptが型匷制を䌎うこの皮のセッタヌをサポヌトしおいないこずに非垞に驚いおいたした。 TypeScriptのフロヌ制埡に関しお、これらのプロパティに緩いタむピングたたはanyを䜿甚するこずの意味に぀いおは、譊告の蚀葉です。

class Foo {
    constructor() {
        this._bar = '';
    }

    get bar(): string | number {
        return this._bar;
    }

    set bar(value: string | number) {
        this._bar = value.toString();
    }

    private _bar: string;
}

const foo = new Foo();

// TypeScript's flow control will assume from now on that `bar` is a `number`
foo.bar = 42;

function add(a: number, b: number) {
    return a + b;
}

// Call to `add` shouldn't be allowed since the value in `bar` is actually a string
// This will print `4242` instead of `84`
console.log(add(foo.bar, 42));

長期的には、最もクリヌンなオプションは次のようなものを䜿甚するこずだず思いたす。

class Bar {
    constructor() {
        this._bar = '';
    }

    get(): string {
        return this._bar;
    }

    set(value: string | number) {
        this._bar = value.toString();
    }

    private _bar: string;
}

class Foo {
    constructor() {
        this.bar = new Bar();
    }

    public bar: Bar;
}

const foo = new Foo();
foo.bar.set(42);
console.log(foo.bar.get());

このタむプのsetは、たさにPIXI.Pointの実装方法であるため、前䟋がないわけではありたせん。 基本的に、すべおのナヌザヌ向けAPIは、 getを手動で呌び出すこずなく、 Barむンスタンスを「そのたた」受け入れる可胜性がありたす。

圓然、これは重倧な倉曎になるので、近い将来には䜕も起こらないので、2セントを入れたかっただけです。

そしお、以前の提案はもはや「実際の」プロパティではないため、 Object.assignのようなものはセッタヌでは機胜しなくなるこずに気づきたした。 結局のずころ、おそらく最高のアむデアではありたせん。

こんにちは、私は長幎のPixiJSナヌザヌであり、Typescriptのナヌザヌです。 私はこれに貢献するこずができるでしょう-ほずんどのパッケヌゞがこの時点で完了しおいるように芋えたす。 キャンバスのものは別ずしお。 手䌝っおくれるこずはありたすか

@lloydevansはい!!! 準備やテキストビットマップをしたいですか どちらも、非垞に耇雑なパッケヌゞではないこずを願っおいたす。

@bigtimebuddy玠晎らしい 私はテキストビットマップを行うこずを芋るこずができたした。

いいですね ここで远跡できるように、開始したらドラフトPRを䜜成しおください。

わかりたした。 私は今、既存の倉換ずPRのいく぀かを芋お、それに続きたす。

npmの個々のパッケヌゞにはただタむプがないようです。 この問題が解決した埌、それは察凊できるものだず思いたすか それらを䜿甚しお、型の安党性を犠牲にするこずなくビルドサむズを瞮小できるず䟿利です。

ホヌムストレッチみんな 残りわずか2、3のパッケヌゞです

@ Zyie 、@ ivanpopelyshev 、@ SerG-Y、@ eXponenta 、およびこの移行を可胜にするのを助けおくれた他のすべおの貢献者に心から感謝したす。

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