我是打字稿的新手。我有一个从 javascript 转换而来的大型程序。我正在检查错误并添加类型,但我不知道如何解决这个问题。
myModule.ts
export const foo = { ... }
export const bar = { ... }
Run Code Online (Sandbox Code Playgroud)
我的文件
import * as myModule from './myModule'
function doesSomething(input: string) {
return myModule[input]
}
Run Code Online (Sandbox Code Playgroud)
打字稿编译器错误:元素隐式具有“任何”类型,因为类型“typeof“./myModule””没有索引签名。
我曾尝试声明一个模块和一个命名空间或尝试实现一个接口,但似乎不起作用。我认为解决方案是在单独的文件中声明模块,但我似乎无法让 TS 识别它。这就是我认为会起作用的:
myModule.d.ts
interface MyModule {
[key: string]: any
}
declare module 'myModule' {
const myModule: MyModule
export = myModule
}
Run Code Online (Sandbox Code Playgroud)
也许添加一个三斜线指向 myFile:
我的文件
/// <reference path="./myModule.d.ts" />
import * as myModule from './myModule'
function doesSomething(input: string) {
return myModule[input]
}
Run Code Online (Sandbox Code Playgroud)
但这并没有真正改变任何东西。
如果您只希望doesSomething使用其值与 的名称相同的字符串进行调用,则myModule可以执行以下操作
import * as myModule from './myModule';
type ModuleType = typeof myModule;
function doesSomething<K extends keyof ModuleType>(input: K): ModuleType[K] {
return myModule[input]
}
Run Code Online (Sandbox Code Playgroud)
你就会有反映类型更准确的返回类型foo,bar等等。
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |