Udostępnij przez


Kod diagnostyczny bicepsa - BCP293

Ta diagnostyka następuje, gdy deklarujesz typ unii z członkami, które nie są literalnymi wartościami.

Description

Wszystkie elementy członkowskie deklaracji typu unii muszą być wartościami literału.

Level

Error

Rozwiązanie

Upewnij się, że wszyscy członkowie deklaracji typu związkowego są wartościami dosłownymi. Więcej informacji można znaleźć w artykule Typy danych zdefiniowane przez użytkownika.

Przykłady

Poniższy przykład podnosi problem diagnostyczny, ponieważ celem poniższego kodu jest ograniczenie wejścia do określonych środowisk ("dev", "test", "prod"), jednocześnie próbując dopuścić dowolną inną wartość ciągu znaków. System typów Bicepsa nie pozwala na takie mieszanie w związku.

type EnvironmentType = 'dev' | 'test' | 'prod' | string 

Jeśli celem jest ścisłe wymuszanie trzech dozwolonych wartości i niepowodzenie kompilacji, usuń typ ogólnego ciągu znaków.

type EnvironmentType = 'dev' | 'test' | 'prod'

Jeśli celem jest dopuszczenie dowolnej wartości ciągu znaków, a lista z góry jest tylko sugestią, użyj bezpośrednio typu generycznego string i całkowicie usuń unację.

type EnvironmentType = string

Poniższy przykład to kolejny przykład, gdzie mieszanie literałów z obiektami zawierającymi ogólne prymitywy jest niedozwolone:

type oneOfSeveralObjects = {foo: 'bar', bar: string} | {fizz: 'buzz'} | {snap: 'crackle'}

Aby rozwiązać problem, wszystkie elementy muszą należeć do tej samej kategorii typu. Ponieważ intencją jest tutaj suma typów zespolonych, najprostszym rozwiązaniem jest zapewnienie, że wszystkie własności przeznaczone jako stałe są zdefiniowane jako literale ciągów w całej sumie.

type oneOfSeveralObjects = {foo: 'bar', bar: 'baz'} | {fizz: 'buzz'} | {snap: 'crackle'}

Dalsze kroki

Aby uzyskać więcej informacji na temat diagnostyki Bicep, zobacz Diagnostyka rdzenia Bicep.