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

Relaterte artikler