The TypeScript Handbookおよび/またはTypeScript Deep Diveにインデックス署名のセクションをお読みください。
おそらくそこには明示的ではありません。なぜインデックスシグニチャが必要ですか?タイプを定義したい場合に、キー名を含めて気になるプロパティのセットを知っている場合は、インデックスの署名は必要ありません。誰かがインデックス署名せずにオブジェクトにアクセスし、未知のキーを使用して、または未知のキーを持つリテラル新鮮なオブジェクトを割り当てるときは、コンパイラエラーです:
const foo: {bar: boolean, baz: boolean} = {
bar: true,
baz: false,
qux: false // error, extra property not expected
};
foo.bar;
foo.baz;
foo.qux; // error, no idea what qux is supposed to be
foo.quux; // error, no idea what quux is supposed to be
上記のコードで
、bar
とbaz
受け入れられますが、 qux
にエラーがあります。あなたに設定することができ、単一のインデックス署名で
const foo: {bar: boolean, baz: boolean, [k: string]: boolean | undefined} = {
bar: true,
baz: false,
qux: false // no error
};
foo.bar;
foo.baz;
foo.qux; // boolean | undefined
foo.quux; // boolean | undefined
:、代わりに、あなたはそれがどうなるか事前に知らなくても、任意のキーをできるようにしたい場合は
、あなたはインデックスの署名を追加することができますキーと値の適切なタイプの多くのプロパティを必要に応じて。署名にインデックスキーを付ける名前はまったく重要ではありません。正しいタイプの任意のキーのプレースホルダです。キーの2つのタイプは、string
とnumber
です。インデックス署名でk
は問題ではないこと
const foo: { [k: number]: boolean | undefined } = { };
foo[0] = true;
foo[1] = false;
foo[2] = void 0; // undefined
foo[12345] = true;
foo[54321] = false;
foo[1.5] = true;
foo[-4] = false;
注:単一number
インデックスを使用して、例えば
、。私は通常k
を使用しますが、それは問題ではないので、key
またはrandom
などを使用できます。単なるプレースホルダです。私はこのような何かを行うことによって、あなたの上記のコードを動作させることができることを意味し
:
export class HelloComponent implements OnInit {
name: string = "karty";
watched: { [id: number]: boolean } = {} ;
// single index signature
watchedOne: { [id: number]: boolean } = {} ;
constructor() {}
// type annotation on talk to ensure the right types
watch(talk: {id: number, fid: number}): void {
console.log('watch', talk.id);
this.watched[talk.id] = true;
this.watchedOne[talk.fid] = true;
console.log('watch-obj', this.watched);
}
ngOnInit() {
this.watch({
id: 9,
fid: 4
});
}
}
お役に立てば幸いです。がんばろう!
'watchedOne'で達成しようとしているのは、2つのインデックスシグネチャが必要だと思いますか?あなたの例では、 'this.watch()'に渡されたオブジェクトの 'fid'プロパティで何もしません。あなたはこのコードが何をすると思いますか? – jcalz
[このコード](https://stackblitz.com/edit/angular-vkxnlr?file=app%2Fhello.component.ts)は、あなたが望むように動作しますか?もしそうなら、私はその周りに答えを作ります。 – jcalz
インデックスシグニチャを使用する方法を知っておく必要があります。2〜3つの例を作成して、どのように動作するかを教えてください。 – Karty