【发布时间】:2018-09-06 14:24:52
【问题描述】:
我想用给定的对象设置CanvasRenderingContext2D 上下文属性。但它总是抛出:
元素隐式具有“any”类型,因为类型“{0}”没有索引签名
我该如何解决这个问题?
interface Attr {
fillStyle: string | CanvasGradient | CanvasPattern;
font: string;
globalAlpha: number;
lineCap: string;
lineWidth: number;
lineJoin: string;
miterLimit: number;
shadowBlur: number;
shadowColor: string;
strokeStyle: string;
textAlign: string;
textBaseline: string;
lineDash: string;
}
const element: HTMLCanvasElement = <HTMLCanvasElement>document.querySelector('#c');
const ctx: CanvasRenderingContext2D = element.getContext('2d');
let attr:Partial<Attr> = {
fillStyle: 'red',
globalAlpha: 0.8
}
function setAttrs(target: CanvasRenderingContext2D, attr: Partial<Attr>) {
for (let p in attr) {
target[p] = attr[p];
}
}
【问题讨论】:
-
这是因为
CanvasRenderingContext2D没有像[key:string]: string | number这样的任何索引签名与之关联。并且您正在尝试通过any类型的索引键访问属性。你需要像这个问题stackoverflow.com/questions/42193262/…那样添加索引定义
标签: javascript typescript