Vyhledávání na webu

typescript - Vytvořte generickou funkci, která přijímá objekty, ale nepřijímá pole


Chci vytvořit obecnou funkci v TypeScriptu, která splňuje toto:

f({ a: 1 }); // success
f(undefined); // success
f([]); // should fail the type check
f([1, 2]); // should fail the type check

Jinými slovy, funkce by neměla umožňovat předávání polí jako argumentu, ale měla by přijímat objekty.

Problém je v tom, že pole je v JavaScriptu objektem. Dokonce toto je platné:

const x: Record<string, any> = ['test']; // works!

Takže nevím, jak mohu napsat argument nebo návratový typ obecně tak, aby přijímal jakýkoli objekt (a také ho vracel), ale nepřijímal pole. Chci to udělat pomocí typů místo běhu programu pomocí Array.isArray.

Odpověď č. 1

Zkuste použít podmíněný typ, například:

type NotArray<T> = T extends Array<unknown> ? never : T;

function f<T>(arg: NotArray<T>) {

}

Selže pro jakýkoli argument typu pole

Související články