Unused '@ts-expect-error' directive.
Unused '@ts-expect-error' directive.
Unused '@ts-expect-error' directive.
Cannot find name 'alert'.
Cannot find name 'alert'.
Cannot find name 'alert'.
Type 'false' does not satisfy the constraint 'true'.
'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later.
'Promise' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later.
Type 'false' does not satisfy the constraint 'true'.
Type 'false' does not satisfy the constraint 'true'.
Issue #36 の対応です。 Simple vue, Promise.all の各問題で正答とすべき解答が誤答と判定されてしまう問題を解消します。
原因は
judge-worker/src/judge.ts
内の compile option および、コンパイルに使用する lib の設定の問題であるようです。Simple vue
提出例: https://type-challenges-judge.pages.dev/problems/00006-hard-simple-vue/submissions/Di8DlNGTeTpzGFtzkZdi
変更前のソースで judge.ts で出力されるエラーをチェックしたところ、以下のエラーが出ていました。
この問題では、ユーティリティ型
ThisType
を使用しますが、ThisType
を使うためにはnoImplicitThis
flag を有効にしなければならないという記述があります。 https://www.typescriptlang.org/docs/handbook/utility-types.html#thistypetypejudge.ts
内で使用する compile option にnoImplicitThis
フラグを付加することで、Unused '@ts-expect-error' directive.
のエラーが解消されるようです。Promise.all
提出例: https://type-challenges-judge.pages.dev/problems/00020-medium-promise-all/submissions/HcPTcixM0K98tgJOtLHX
変更前のソースで judge.ts で出力されるエラーをチェックしたところ、以下のエラーが出ていました。
Promise
を値として使うために lib を es2015 以降に変更しなければならないようです。 変更前の状態では、明示的にコピーした es5 の lib を使用する設定になっていますが、compilerHost の設定を変更して明示的な lib の設定を削除することで新しいバージョンの lib が使われるようになり、エラーが解消するようです。 lib のみの変更について方法がわからず、代わりに createCompilerHost でデフォルト設定の compilerHost を作成し、変更したいメソッドだけ書き換えるかたちで実装しています (以下のリンク等を参考にしています)。 https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#customizing-module-resolution compiler API については全く初めて触ったので、もっと良い書き方があるかもしれません。テストについては、
judge.ts
単体で手元でいくつかの問題サンプルについて試した範囲では問題なさそうでしたが、開発サーバー全体の実行は環境構築ができておらず試していません。以上、お役に立てば幸いです。