13af6ab5fSopenharmony_ci#  Some of utility types are not supported
23af6ab5fSopenharmony_ci
33af6ab5fSopenharmony_ciRule ``arkts-no-utility-types``
43af6ab5fSopenharmony_ci
53af6ab5fSopenharmony_ci**Severity: error**
63af6ab5fSopenharmony_ci
73af6ab5fSopenharmony_ciCurrently ArkTS does not support utility types from TypeScript extensions to the
83af6ab5fSopenharmony_cistandard library, except following: ``Partial``, ``Required``, ``Readonly``, ``Record``.
93af6ab5fSopenharmony_ci
103af6ab5fSopenharmony_ciFor the type *Record<K, V>*, the type of an indexing expression *rec[index]* is
113af6ab5fSopenharmony_ciof the type *V | undefined*.
123af6ab5fSopenharmony_ci
133af6ab5fSopenharmony_ci
143af6ab5fSopenharmony_ci## TypeScript
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ci
173af6ab5fSopenharmony_ci```
183af6ab5fSopenharmony_ci
193af6ab5fSopenharmony_ci    type Person = {
203af6ab5fSopenharmony_ci        name: string
213af6ab5fSopenharmony_ci        age: number
223af6ab5fSopenharmony_ci        location: string
233af6ab5fSopenharmony_ci    }
243af6ab5fSopenharmony_ci
253af6ab5fSopenharmony_ci    type QuantumPerson = Omit<Person, "location">
263af6ab5fSopenharmony_ci
273af6ab5fSopenharmony_ci    let persons : Record<string, Person> = {
283af6ab5fSopenharmony_ci        "Alice": {
293af6ab5fSopenharmony_ci            name: "Alice",
303af6ab5fSopenharmony_ci            age: 32,
313af6ab5fSopenharmony_ci            location: "Shanghai"
323af6ab5fSopenharmony_ci        },
333af6ab5fSopenharmony_ci        "Bob": {
343af6ab5fSopenharmony_ci            name: "Bob",
353af6ab5fSopenharmony_ci            age: 48,
363af6ab5fSopenharmony_ci            location: "New York"
373af6ab5fSopenharmony_ci        }
383af6ab5fSopenharmony_ci    }
393af6ab5fSopenharmony_ci    console.log(persons["Bob"].age)
403af6ab5fSopenharmony_ci    console.log(persons["Rob"].age) // Runtime exception
413af6ab5fSopenharmony_ci
423af6ab5fSopenharmony_ci```
433af6ab5fSopenharmony_ci
443af6ab5fSopenharmony_ci## ArkTS
453af6ab5fSopenharmony_ci
463af6ab5fSopenharmony_ci
473af6ab5fSopenharmony_ci```
483af6ab5fSopenharmony_ci
493af6ab5fSopenharmony_ci    class Person {
503af6ab5fSopenharmony_ci        name: string = ""
513af6ab5fSopenharmony_ci        age: number = 0
523af6ab5fSopenharmony_ci        location: string = ""
533af6ab5fSopenharmony_ci    }
543af6ab5fSopenharmony_ci
553af6ab5fSopenharmony_ci    class QuantumPerson {
563af6ab5fSopenharmony_ci        name: string = ""
573af6ab5fSopenharmony_ci        age: number = 0
583af6ab5fSopenharmony_ci    }
593af6ab5fSopenharmony_ci
603af6ab5fSopenharmony_ci    type OptionalPerson = Person | undefined
613af6ab5fSopenharmony_ci    let persons : Record<string, OptionalPerson> = {
623af6ab5fSopenharmony_ci    // Or:
633af6ab5fSopenharmony_ci    // let persons : Record<string, Person | undefined> = {
643af6ab5fSopenharmony_ci        "Alice": {
653af6ab5fSopenharmony_ci            name: "Alice",
663af6ab5fSopenharmony_ci            age: 32,
673af6ab5fSopenharmony_ci            location: "Shanghai"
683af6ab5fSopenharmony_ci        },
693af6ab5fSopenharmony_ci        "Bob": {
703af6ab5fSopenharmony_ci            name: "Bob",
713af6ab5fSopenharmony_ci            age: 48,
723af6ab5fSopenharmony_ci            location: "New York"
733af6ab5fSopenharmony_ci        }
743af6ab5fSopenharmony_ci    }
753af6ab5fSopenharmony_ci    console.log(persons["Bob"]!.age)
763af6ab5fSopenharmony_ci    if (persons["Rob"]) { // Explicit value check, no runtime exception
773af6ab5fSopenharmony_ci        console.log(persons["Rob"].age)
783af6ab5fSopenharmony_ci    }
793af6ab5fSopenharmony_ci
803af6ab5fSopenharmony_ci```
813af6ab5fSopenharmony_ci
823af6ab5fSopenharmony_ci
83