#448·plop

How to write a Dynamic Actions Array in TypeScript?

Author: awhitfordCreated Sep 24, 2024Updated Nov 18, 2024

I am using plopjs and was having a great time until I decided to migrate to TypeScript (because I like types). What is the advice for using a Dynamic Actions Array like this in TypeScript?

typescript
actions: (answers) => {
}

Inside the closure, I want to be able to reference the prompts like: answers.projectName. If I create an interface for the prompt parameters, like:

typescript
interface PromptProps {
  projectName: string
}

Then, I can add type information like this:

actions: (answers: PromptProps) => {
}

While this solves the answers.projectName problem, Typescript still complains about the actions declaration:

Type '(answers: PromptProps) => (string | ((answers: PromptProps) => string) | { type: string; path: string; pattern: RegExp; template: string; })[]' is not assignable to type 'Actions | undefined'.
  Type '(answers: PromptProps) => (string | ((answers: PromptProps) => string) | { type: string; path: string; pattern: RegExp; template: string; })[]' is not assignable to type 'DynamicActionsFunction'.
    Types of parameters 'answers' and 'data' are incompatible.
      Type 'Answers | undefined' is not assignable to type 'PromptProps'.
        Type 'undefined' is not assignable to type 'PromptProps'.ts(2322)

What is the solution?

CC: @crutchcorn @cspotcode