打字稿游樂場
type Foo<BooleanParameter extends boolean> = { boolean_parameter: BooleanParameter } & (BooleanParameter extends true ? { first_parameter: number } : { second_parameter: string })
const bar = <BooleanParameter extends boolean>(foo: Foo<BooleanParameter>) => {
if (foo.boolean_parameter) {
//foo.first_parameter Property 'first_parameter' does not exist on type 'Foo<BooleanParameter>'.
} else {
//foo.second_parameter Property 'second_parameter' does not exist on type 'Foo<BooleanParameter>'.
}
}
為什么我不能訪問first_parameter,second_parameter什么時候boolean_parameter是通用的?
uj5u.com熱心網友回復:
這對你有用嗎...
type TrueBoolean = { boolean_parameter: true } & { first_parameter: number };
type FalseBoolean = { boolean_parameter: false } & { second_parameter: string };
type Foo<B extends boolean> = B extends true ? TrueBoolean : FalseBoolean;
const bar = <B extends boolean>(foo: Foo<B>) => {
if (foo.boolean_parameter) {
return foo.first_parameter;
} else {
return foo.second_parameter;
}
}
const f: Foo<boolean> = { boolean_parameter: true, first_parameter: 20 };
bar(f); // okay
const g: Foo<boolean> = { boolean_parameter: false, second_parameter: "20" };
bar(g); // okay
// const h: Foo<boolean> = { boolean_parameter: true, second_parameter: "3" }; // Error, Object literal may only specify known properties, and 'second_parameter' does not exist in type 'TrueBoolean'
// const i: Foo<boolean> = { boolean_parameter: false, first_parameter: 3 }; // Error, Object literal may only specify known properties, and 'first_parameter' does not exist in type 'FalseBoolean'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/451843.html
