使用 Typescript
Stimulus 本身是用 TypeScript 编写的,并直接在其软件包上提供类型。以下文档展示了如何为 Stimulus 属性定义类型。
﹟ 定义控制器元素类型
默认情况下,控制器的 element 为 Element 类型。你可以通过将其指定为 泛型类型 来覆盖控制器元素的类型。例如,如果元素类型预期为 HTMLFormElement
import { Controller } from "@hotwired/stimulus"
export default class MyController extends Controller<HTMLFormElement> {
submit() {
new FormData(this.element)
}
}
﹟ 定义值属性
你可以使用 TypeScript declare 关键字定义已配置值的属性。如果你在控制器中使用这些属性,你只需要定义它们即可。
import { Controller } from "@hotwired/stimulus"
export default class MyController extends Controller {
static values = {
code: String
}
declare codeValue: string
declare readonly hasCodeValue: boolean
}
declare关键字避免覆盖现有的 Stimulus 属性,而只是为 TypeScript 定义类型。
﹟ 定义目标属性
你可以使用 TypeScript declare 关键字定义已配置目标的属性。如果你在控制器中使用这些属性,你只需要定义它们即可。
[name]Target 和 [name]Targets 属性的返回类型可以是继承自 Element 类型的任何类型。选择最符合你需求的类型。如果你想将其定义为通用 HTML 元素,请选择 Element 或 HTMLElement。
import { Controller } from "@hotwired/stimulus"
export default class MyController extends Controller {
static targets = [ "input" ]
declare readonly hasInputTarget: boolean
declare readonly inputTarget: HTMLInputElement
declare readonly inputTargets: HTMLInputElement[]
}
declare关键字避免覆盖现有的 Stimulus 属性,而只是为 TypeScript 定义类型。
﹟ 自定义属性和方法
其他自定义属性可以在控制器类上以 TypeScript 方式定义
import { Controller } from "@hotwired/stimulus"
export default class MyController extends Controller {
container: HTMLElement
}
在 TypeScript 文档 中阅读更多内容。