我正在嘗試在 Angular 13 中訪問帶有型別索引的變數,但出現 TS7053 錯誤。 這個 stackblitz準確地顯示了我在做什么,但是它在那里作業得很好,沒有錯誤。
export class AppComponent {
name = 'Angular ' VERSION.major;
Prop01 : boolean = false;
Prop02 : boolean = false;
Prop03 : boolean = false;
private setProp(prop: string, value: boolean): void {
this[prop] = value; // this works in the Stackblitz but not in my project
}
}
唯一的區別是我使用的是 V13,而 stackblitz 仍然使用 V12。我查看了我的 VS Code 擴展,發現它Ts Lint被棄用了,Es Lint所以我禁用了它并重新啟動了 VS Code,但this[prop]仍然拋出一個錯誤說
元素隱式具有“any”型別,因為“string”型別的運算式不能用于索引“MyComponent”型別。在“MyComponent”型別上找不到帶有“string”型別引數的索引簽名。
我已經在舊版本的 Angular 中做到了這一點,所以我不明白是什么讓它突然不起作用,有人知道這是為什么嗎?
uj5u.com熱心網友回復:
我建議enum用這些變數名創建一個:
export enum MyEnums {
Prop01: 'Prop01',
Prop02: 'Prop02',
Prop03: 'Prop03'
}
零件:
import {myEnum} from './myEnums.ts'
export class AppComponent {
name = 'Angular ' VERSION.major;
Prop01 : boolean = false;
Prop02 : boolean = false;
Prop03 : boolean = false;
private setProp(prop: string, value: boolean): void {
this[prop as MyEnum] = value;
console.log(this[prop as myEnum]); // true or false, whatever your send
}
}
Angular v12 是strict mode默認情況下包含啟用(這非常好)的第一個版本,因此要求您創建用于訪問該引數的簽名非常嚴格。
您可以在舊版本中執行此操作,因為除非您手動將其設定為“on”,否則嚴格模式未在那里啟用
uj5u.com熱心網友回復:
由于您使用的是 3 個單獨的變數而不是物件(對于物件,有很多問題和答案,例如:Typescript:在型別 '{“A”:string; } )
在您使用變數的情況下,我將使用type帶有宣告的變數名稱的a ,然后您可以呼叫as您的型別。所以像:
export type PropType = 'Prop01' | 'Prop02' | 'Prop03';
然后你的功能:
private setProp(prop: string, value: boolean): void {
this[prop as PropType] = value;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390804.html
