Я использую 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
?