Typescript tomt objekt og hvilken forskjell
Kan noen forklare meg hva forskjellen er mellom {} og any?
for eksempel, hva er forskjellen mellom å sette en generisk grensesnittparameter som Interface<{}> eller som Interface<any>.
Noen ideer?
Svar #1
For å bedre forstå hva {} betyr, sjekk https://mariusschulz.com/blog/the-object-type-in-typescript.
{} er en topp-type. Hva betyr det? Hvis du merker noe som {}, kan det være noen av følgende typer: string | number | boolean | object | {[key:string]: any} | Object | any[]
const test1: {} = 'hello'
const test2: {} = 123
const test3: {} = false
const test4: {} = {foo:'bar'}
Selv om null | undefined ikke er tillatt
// Expect errors
const test6: {} = null
const test7: {} = undefined
Lekerom lenke
any slår helt av typekontrollen, og du kan gjøre hva som helst "galt", som du har vært vant til fra vanlig JS. PROFF-TIPS: ikke bruk dette hjemme :) bruk definitivt no-any-regelen i ts-lint
Svar #2
Så det finnes typer i JavaScript. Som number, string, object og boolean. any passer til noen av disse typene. {} passer bare til et tomt object.
function fn1(foo: any): void {}
function fn2(foo: {}): void {}
fn1(23); // OK
fn1('test'); // OK
fn1(undefined); // OK
fn2({}); // OK
fn2(23); // Not OK
fn2(null); // Not OK
