camomileCase:
私が使用して、JavaScriptのプロジェクトで働いているJSDocのを/ typescriptですバリデーションと型をキャスト問題を抱えて、その後それの静的プロパティを使用して。
インポートされたタイプを使用している場合、私は以下の問題を抱えています:
// @ts-check -- foo.js
export default class Foo {
static bar() {}
}
// @ts-check -- bar.js
/** @typedef {import('./foo').default} Foo */
const HopefullyFoo = /** @type {unknown} */ ('Foo');
const foo = /** @type {typeof Foo} */ (HopefullyFoo);
foo.bar();
出力:
src/components/bar.js:7:31 - error TS2693: 'Foo' only refers to a type, but is being used as a value here.
7 const foo = /** @type {typeof Foo} */ (HopefullyFoo);
~~~
私は1つのファイルにすべてをかける場合、それは大丈夫そうです:
// @ts-check
class Foo {
static bar() {}
}
const LikelyFoo = /** @type {unknown} */ ('Foo');
const foo = /** @type {typeof Foo} */ (LikelyFoo);
foo.bar();
// No errors
私はこのエラーを取得するTYPEOFにキャストしていない場合、私はそれが右のどちらかだとは思わないようにします。
// @ts-check
class Foo {
static bar() {
}
}
const LikelyFoo = Foo;
const foo = /** @type {Foo} */ (LikelyFoo);
foo.bar();
出力
src/components/foo.js:13:5 - error TS2576: Property 'bar' is a static member of type 'Foo'
13 foo.bar();
~~~
これは可能ですか?
shlang:
クラスの種類は、このクラスのコンストラクタによって作成されたオブジェクトが持っているということタイプです。このタイプは、あなたが正しく使用する理由であるだけで、インスタンス・レベルのフィールドが含まれtypeof
演算子を。問題は、代わりに、値を必要とする、オペレータはタイプに適用することができないことです。通常のインポートの場合
import Foo from "./foo";
あなたは型と値(コンストラクタ)の両方を取得しますが、JSDocの輸入の場合、あなただけのタイプを取得します。あなたには、いくつかの理由で実際の値をインポートすることができないのであれば、あなたはのエイリアスを追加することができtypeof Foo
クラス定義の隣:
foo.jsは
// @ts-check -- foo.js
export default class Foo {
static bar() {}
}
/** @typedef {typeof Foo} FooCtor */
その後、それを使用します
// @ts-check -- bar.js
/** @typedef {import('./foo').FooCtor} FooCtor */
const HopefullyFoo = /** @type {unknown} */ ('Foo');
const foo = /** @type {FooCtor} */ (HopefullyFoo);
foo.bar();
PS:TBH、私は私が間違っている可能性がありますので、用途は、このようにTS見たことがありません。