【发布时间】:2021-09-15 15:32:47
【问题描述】:
我正在创建一个如下所示的数据文件:
interface ISprite {
textureName: string,
frame: Frame,
origin: Vec2,
zIndex?: number
}
export let sprites: Record<string, ISprite> = {
monster: {
textureName: "monster",
frame: new Frame(0, 0, 32, 41),
origin: new Vec2(16, 28),
zIndex: -1
},
player: {
textureName: "player",
frame: new Frame(0, 0, 32, 32),
origin: new Vec2(15, 32)
}
};
如果我尝试从另一个文件中导入此数据文件,如下所示:
import { sprites } from "../data/sprites";
然后尝试访问这样的属性:
let player = sprites.player;
然后当我输入 sprites. 时,我没有得到 Intellisense(代码完成)
然而,我注意到,如果我从 sprites 变量声明中删除 Record<string, ISprite> 注释,我确实会获得智能感知。
但是,我相信我需要这个注释,因为我的一个函数只接受 ISprite 类型,而我不想让它接受 any。
是否可以在保持代码完成的同时保持强类型?
【问题讨论】:
-
试试
sprites: {[k: string]: ISprite} -
@EmanuelVintilă 同样的问题 =(
-
因为在
Record<string, ISprite>中,string可以是任意键。如果你想要智能感知,你需要用'monster' | 'player'之类的联合注释键。
标签: typescript record code-completion strong-typing