オプションで引数を取ることができるフィールドデコレータを作成したいと思います。 引数には、次のいずれかの値が含まれている必要があります。何もない、ブール値、または関数です。 私はこれを行う方法を知っているが、私は結果に100%満足していない:@RequiredのTypeScriptのデコレータにオプションのパラメータを追加する方法は?
export class TestClass{
@Required(isRequired)
public testField: string;
}
export function isRequired():boolean{
... some validation logic, maybe depending on other fields...
return result;
}
は、インプリメンテーション:
export function Required(expression?: boolean|Function): Function {
return (target: any, key: string) => {
if (expression === null || typeof expression == 'undefined') {
expression = true;
}
console.log("Required found: " + expression, ":", target, key);
... register the field and its validation expression for later usage
}
}
だから、これは正常に動作しますが、私はしたくないとき式を追加(したがって不履行「真」という表現を使用)し、私はこのようにそれを書くことができるようにしたい:
class TestClass{
@Required
public testField: string;
}
私が言って活字体エラー(TS1240)を取得:
をという式で呼び出されたときに、プロパティデコレータの署名を解決できませんでした。指定されたパラメータは
class TestClass{ @Required() public testField: string; }
は、必要に応じて引数とする場合、その引数をとるデコレータの実装を記述することが可能です)だから私は@Requiredを(書く必要がコール ターゲット
のいずれかの署名と一致しません。指定されていない場合、 "()"を追加する必要はありませんか?