reactjs - Hur man håller TypeScript-typer DRY
Jag har börjat använda TypeScript i min React-applikation men jag märker att jag upprepar mig själv, särskilt med mina mapDispatchToProps-funktioner. Finns det ett bättre sätt att deklarera typerna på?
Jag har en känsla av att jag kanske kan komma åt funktionstyperna inom this-gränssnittet state som används på den asynkrona funktionen, men jag vet inte tillräckligt om TS och kan inte hitta ett specifikt svar på detta någonstans.
index.tsx
import { globalDispatchKeyData } from '../actions.tsx'
import { doSomething } from './services'
class Index extends Component {
// I declare it here
globalDispatchKeyData: (key: string, data: {}) => void
constructor(props: any) {
this.globalDispatchKeyData = this.props.globalDispatchKeyData.bind(this)
this.doSomething = doSomething.bind(this)
...
...
}
const mapDispatchToProps = { globalDispatchKeyData }
tjänster.tsx
interface IndexState {
// I also declare it here
globalDispatchKeyData: (key: string, data: {}) => void
}
export async function doSomething(this: IndexState) {
globalDispatchKeyData('TYPE', {})
}
Är detta det enda sättet för närvarande att deklarera typer för dispatch-funktioner eller missar jag något?
Tack på förhand för din hjälp!
Svar #1
Du kan skapa en typalias för potentiellt vilken annan typ som helst för att undvika att upprepa dig själv.
type DispatchKeyDataFn = (key: string, data: {}) => void
// Usage
globalDispatchKeyData: DispatchKeyDataFn
Typalias är extremt flexibla och kan användas för att skapa unioner, snitt och många andra saker som dokumenteras här
https://www.typescriptlang.org/docs/handbook/advanced-types.html (mot den nedre halvan)
