почему `semanti c error TS2344: Тип" ptn3 "не удовлетворяет ограничению" ptn1 "| "Ptn2". ` - PullRequest
0 голосов
/ 10 апреля 2020

Я использую TypeScript 3.8.3.
Я хотел указать ключ интерфейса и получить информацию о типе, поэтому я написал следующий код.

interface T1 {
  ptn1 : string
  ptn2 : number
}

type Factory<N extends keyof T1, T extends T1 = T1> = T1[N]

type F1 = Factory<'ptn1'> // F1 type is "string"

ок, все работает.
И затем я хотел расширить тип T1, чтобы использовать его, поэтому я изменил его следующим образом.

export interface T1 {
  ptn1 : string
  ptn2 : number
}

export type Factory<N extends keyof T1, T extends T1 = T1> = T1[N]

// OTHER FILE --------------

import { T1, Factory } from './above_code.ts'

type F1 = Factory<'ptn1'> // F1 type is "string"

interface T2 extends T1 {
  ptn3: Object
}
type T2keys = keyof T2 // T2keys = "ptn3" | "ptn1" | "ptn2"

type F2 = Factory<'ptn2'> // F2 type is "number"

Но следующий код выдаст ошибку.

// A continuation of the code above..
type F3 = Factory<'ptn3', T2> // semantic error TS2344: Type '"ptn3"' does not satisfy the constraint '"ptn1" | "ptn2"'.

Почему ошибка TS2344?
Как мне написать, что type 3 = Factory<'ptn3', T2> станет Object?

1 Ответ

0 голосов
/ 10 апреля 2020

Вы на самом деле не используете T внутри Factory типа:


export type Factory<N extends keyof T, T extends T1 = T1> = T[N]



export interface T1 {
  ptn1 : string
  ptn2 : number
}

type F1 = Factory<'ptn1'> // F1 type is "string"

interface T2 extends T1 {
  ptn3: Object
}
type F2 = Factory<'ptn2'> // F2 type is "number"

type F3 = Factory<'ptn3', T2>

Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...