Skip to content

Commit 75f020a

Browse files
Merge pull request #44 from jvitormf/jvitormf-ptbr-translation
[PT-BR] noPropertyAccessFromIndexSignature.md
2 parents a7b8115 + d5375fc commit 75f020a

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
display: "Sem acesso a propriedade pela assinatura do índice"
3+
oneline: "Força o uso de acessadores indexados para chaves declaradas usando um tipo indexado"
4+
---
5+
6+
Esta configuração garante a consistência entre acessar o campo pela sintaxe "ponto" (`obj.chave`), e "indexado" (`obj["chave"]`) e a forma que a propriedade é declarada no tipo.
7+
8+
Sem esta flag, o Typescript irá permitir que você use a sintaxe de ponto para acessar os campos que não estão definidos:
9+
10+
```ts twoslash
11+
// @errors: 4111
12+
declare function obterConfiguracoes(): ConfiguracoesDoJogo;
13+
// ---cut---
14+
interface ConfiguracoesDoJogo {
15+
// Propriedades diretamente conhecidas
16+
velocidade: "rápido" | "médio" | "lento";
17+
qualidade: "alta" | "baixa";
18+
19+
// Assume qualquer coisa desconhecida para a interface
20+
// como um string.
21+
[chave: string]: string;
22+
}
23+
24+
const configuracoes = obterConfiguracoes();
25+
configuracoes.velocidade;
26+
// ^?
27+
configuracoes.qualidade;
28+
// ^?
29+
30+
// Acessadores de chaves desconhecidas são permitidas
31+
// neste projeto, e são do tipo `string`
32+
configuracoes.nomeDeUsuario;
33+
// ^?
34+
```
35+
36+
Ativar esta flag irá gerar um erro porque o campo desconhecido usa a sintaxe ponto invés da sintaxe indexada.
37+
38+
```ts twoslash
39+
// @errors: 4111
40+
// @noPropertyAccessFromIndexSignature
41+
declare function obterConfiguracoes(): ConfiguracoesDoJogo;
42+
interface ConfiguracoesDoJogo {
43+
velocidade: "rápido" | "médio" | "lento";
44+
qualidade: "alta" | "baixa";
45+
[chave: string]: string;
46+
}
47+
// ---cut---
48+
const configuracoes = obterConfiguracoes();
49+
configuracoes.velocidade;
50+
configuracoes.qualidade;
51+
52+
// Este precisa ser configuracoes["nomeDeUsuario"]
53+
configuracoes.nomeDeUsuario;
54+
// ^?
55+
```
56+
57+
O objetivo desta flag é para sinalizar a intenção em sua sintaxe de chamada sobre quão certo você está sobre a existência desta propriedade.

0 commit comments

Comments
 (0)