Typescript-strängtyp som måste börja med specifika tecken


Jag vet att vi i TypeScript kan tvinga fram specifika strängar på detta sätt:

const myStrings = ['foo', 'bar', 'baz'] as const;
type MyStringTypes = typeof myStrings[number];

Men det jag skulle behöva är att enbart tvinga de första tecknen i mina slutgiltiga strängar.

Till exempel skulle jag vilja skapa en typ (MyPrefixTypes) med något i stil med 'prefix1', 'prefix2', ..., 'prefixN', följt av vilken annan karaktär som helst.

Med detta skulle jag kunna kontrollera om strängen är korrekt eller inte.

Exempel :

const foo: MyPrefixTypes = 'prefix1blablabla'; // OK
const bar: MyPrefixTypes = 'incorrectprefixblablabla'; // NOT OK

Svar #1

Från och med TypeScript 4.1 kan du använda en mallsträngstyp för detta.

type StartsWithPrefix = `prefix${string}`;

Detta fungerar även för typunioner:

// `abc${string}` | `def${string}`
type UnionExample = `${'abc' | 'def'}${string}`;

// For your example:
type MyPrefixTypes = `${MyStringTypes}${string}`;

const ok: UnionExample = 'abc123';
const alsoOk: UnionExample = 'def123';
const notOk: UnionExample = 'abdxyz';

// Note that a string consisting of just the prefix is allowed
// (because '' is assignable to string so
// `${SomePrefix}${''}` == SomePrefix is valid)
const ok1: MyPrefixTypes = 'foo'
const ok2: MyPrefixTypes = 'barxyz'
const ok3: MyPrefixTypes = 'bazabc'
const notOk1: MyPrefixTypes = 'quxfoo'

Du kan till och med definiera en hjälptyp:

type WithPrefix<T extends string> = `${T}${string}`;

type StartsWithPrefix = WithPrefix<'prefix'>;
type UnionExample = WithPrefix<'abc' | 'def'>;
type MyPrefixTypes = WithPrefix<MyStringTypes>;

Lekplatslänk


Relaterat :

  • typescript mallsträng som gränssnittnyckel
  • Typescript: tillåt vilken egenskap som helst som börjar med en specifik sträng

Relaterade artiklar