我目前有這個:
export class UnderTest<N extends string> {
name: N;
}
export type Tester<T> =
T extends UnderTest<infer N>
? { name: `${N}`, passed: true }
: { passed: false };
let x: Tester<Object>;
let y: Tester<UnderTest<"foo">>;
這正在做預期的事情,即創建兩種不同型別的 2 個變數,其中第一種型別是{ passed: false },第二種型別是{ name: "foo", passed: true }。
我想知道是否可以更改“通過”案例以包含以 N 命名的屬性。基本上,我想這樣Tester<T>做。
export type Tester<T> =
T extends UnderTest<infer N>
? { name: `${N}`, passed: true, `${N}`: "Yes, baby!" }
: { passed: false };
所以那y: Tester<UnderTest<"foo">>會有一個foo: "Yes, baby!"屬性。從版本 4.8.4 開始,上面的宣告會觸發一些錯誤。
esri/views/shadergraph/v6.ts:59:41 - error TS1131: Property or signature expected.
59 ? { name: `${N}`, passed: true, `${N}`: "Yes, baby!" }
~~~
esri/views/shadergraph/v6.ts:59:47 - error TS1005: ';' expected.
59 ? { name: `${N}`, passed: true, `${N}`: "Yes, baby!" }
~
esri/views/shadergraph/v6.ts:59:62 - error TS1128: Declaration or statement expected.
59 ? { name: `${N}`, passed: true, `${N}`: "Yes, baby!" }
~
esri/views/shadergraph/v6.ts:60:9 - error TS1128: Declaration or statement expected.
60 : { passed: false };
~
[12:35:38 PM] Found 4 errors. Watching for file changes.
uj5u.com熱心網友回復:
將其與映射型別相交:
? { name: `${N}`, passed: true } & { [_ in N]: "Yes, baby!" }
如果這給出了關于 N 不是屬性鍵的錯誤,您可能還必須添加一個推斷約束:
T extends UnderTest<infer N extends string>
由于這個映射型別只有一個鍵和一個值,我們也可以用它Record來實作同樣的事情:
? { name: `${N}`, passed: true } & Record<N, "Yes, baby!">
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511208.html
標籤:打字稿仿制药
上一篇:與任意數量的泛型型別相交
