Eu pretendia escrever um parâmetro do tipo number
, mas escrevi o tipo incorretamente, escrevendo em Number
vez disso.
No meu IDE (JetBrains WebStorm) o tipo Number
é escrito com a mesma cor que é usada para o tipo primitivo number
, enquanto se eu escrever o nome de uma classe (conhecida ou desconhecida) ela usa uma cor diferente, então eu acho que de alguma forma ela reconhece o tipo incorreto como um tipo correto / quase correto / tipo de correto.
Quando eu compilo o código, em vez de reclamar, por exemplo, que o compilador não conseguiu encontrar uma classe chamada Number
, o TSC escreve esta mensagem de erro:
Illegal property access
Isso significa que number
e Number
ambos co-existe como diferentes tipos?
Se isso for verdade, qual é a diferença entre essas classes?
Se este não for o caso, então porque ele simplesmente não escreveu a mesma mensagem de erro que exibe para classes desconhecidas ("O nome 'Número' não existe no escopo atual")
Este é o código:
class Test
{
private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];
// THIS WORKS
public getValue(index:number):string
{
return this.myArray[index];
}
// THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
public getAnotherValue(index:Number):string
{
return this.myArray[index];
}
}
fonte
Para aumentar a resposta de Ryan com a orientação do que fazer e não fazer do TypeScript :
fonte
[]
para denotar tipos de array. Pode haver exceções, não tenho certeza.Como diz o documento TypeScript:
var Number: NumberConstructor (value?: any) => number
Como se diz, tome
any
como parâmetro e número de retorno ounull
É uma maneira fácil de verificar se um valor é um número ou não
Number("1234"); // 1234 Number("1234.54") // 1234.54 Number("-1234.54") // -1234.54 Number("1234.54.33") // null Number("any-non-numeric") // null
Então, simplesmente podemos usar para verificar o número, como:
if(Number(val)){ console.log('val is a number'); } else { console.log('Not a number'); }
fonte