簡體   English   中英

Typescript 泛型與 in keyof

[英]Typescript Generic with in keyof

我想知道為什么使用T1 ,我無法獲得與{ a: string, b: number, c: boolean }相同的類型? -? 沒有泛型就無法工作。 它僅適用於泛型。

type Item = { a: string, b: number | undefined, c: boolean };
type T1 = { [P in keyof Item]-?: Item[P] };  // { a: string, b: number | undefined, c: boolean }
type T2<U> = { [P in keyof U]-?: U[P] };  // { a: string, b: number, c: boolean }
const t2: T2<Item> = {
    a: 'abc',
    b: 123,
    c: false
}

事實上, b?: numberb: number|undefined是不等價的。 你可以參考下面的例子。 b: number|undefined更改為b?: number時,它將正常工作。 對於b: number|undefined的例子,使用T2<Item>必須有b屬性不能說明問題,因為當只有{ a: string, b: number | undefined, c: boolean} { a: string, b: number | undefined, c: boolean}b屬性也必須存在。 TS游樂場

type Item = { a: string, b?: number, c: boolean };
type T1 = { [P in keyof Item]-?: Item[P] };  // { a: string, b: number | undefined, c: boolean }
type T2<U> = { [P in keyof U]-?: U[P] };  // { a: string, b: number, c: boolean }
const t2: T2<Item> = {
    a: 'abc',
    b: 123,
    c: false
}

const t3: T1 = {
    a: 'abc',
    b: 123,
    c: false
}

// Property 'b' is missing in type '{ a: string; c: false; }' but required in type '{ a: string; b: number | undefined; c: boolean; }'.
const t4: { a: string, b: number | undefined, c: boolean } = {
    a: 'abc',
    c: false
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM