typescript - Ingen indexsignatur med en parameter av typen 'string' hittades på typ '
Jag arbetade på mitt första Firebase TypeScript-funktionsprojekt
Jag har följande kodsnutt.
const files = {
status: './src/api/status.f.js',
invite: './src/api/invite.f.js',
user: './src/api/user.f.js',
auth: './src/api/auth.f.js',
social: './src/api/social.f.js'
}
for (let file in files)
if (files.hasOwnProperty(file)) {
// Setting function name equivalent to the file name
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === file) {
const ApiClass = require(files[file])
const app = new ApiClass(context)
exports[file] = app.handler
}
}
I detta, på denna rad får jag följande fel const ApiClass=require(files[file])
Elementet har implicit typen 'any' eftersom ett uttryck av typen 'string' inte kan användas för att indexera typen '{ status: string; invite: string; user: string; auth: string; social: string; }'. Ingen indexsignatur med en parameter av typen 'string' hittades på typen '{ status: string; invite: string; user: string; auth: string; social: string; }'
Primär fråga: Kan någon hjälpa mig att lista ut vad jag gör fel här?
Svar #1
Typfelet visas eftersom du har aktiverat "noImplicitAny": true i tsconfig.
Om du vill behålla "noImplicitAny": true, finns det 2 lösningar på ditt problem, välj någon av dem.
const ApiClass = require(files[file as keyof typeof files])const files: { [key: string]: string } = { ... }
Efter lite efterforskning tror jag att det optimala sättet är att utöka Object.prototype.hasOwnProperty()-metodens signatur.
// somewhere in your project, write:
interface Object {
hasOwnProperty<T>(this: T, v: any): v is keyof T
}
På detta sätt fungerar .hasOwnProperty som en typvakt som automatiskt begränsar typen av file till keyof typeof files.
