Как обновить тип typescript с помощью функции void?

#typescript

#typescript

Вопрос:

Есть ли способ сделать это?

Песочница.

 type X = {
  p1: string
  p2: number
}

type Y = {
  p1: string
  p2: number
  p3: boolean
}

const app = (x: X)=> {
   const fn = (x: X) => {
      ((x as unknown) as Y).p3 = true // any other way to do it?
   }

   fn(x)

   x // vscode should show it as Y type, not X
}

const req: X =  {p1: '', p2: 1}

app(req)
 

Я спрашиваю, потому что у меня есть объект запроса в приложении, который в witch я добавляю некоторые новые свойства, но получение правильных типов кажется непростым.

Ответ №1:

Если вы просто хотите описать какой-либо тип с 2 статическими реквизитами с неизвестными другими динамическими реквизитами, добавьте индексатор:

 type X = {
  p1: string
  p2: number
  [key: string]: string | number | boolean;
}
...
const app = (x: X)=> {
   const fn = (x: X) => {
      x.p3 = true
   }

   fn(x)

   x // x cannot be turned into y by some magic actions
}