TypeScript 使用VS Code填写实现将展开类型

zpjtge22  于 4个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(126)

使用在Baz实现中填充的快速修复:
x1a3b1x
我期望的结果是:
x1a4b1x
/cc @mjbvz

flmtquvp

flmtquvp1#

看起来我们把与符号类型关联的别名的信息丢弃了,作为getTypeOfSymbol的一部分,所以我们需要修改它或者创建一个辅助程序,在可能的情况下尝试检索别名。

xmjla07d

xmjla07d2#

我最近遇到了这个问题。"Implement interface"快速修复扩展了我的类型别名,这最终变得非常长。它还扩展了泛型方法的类型约束。

interface MyInterface {
  myProp: string,
  myProp2: string,
}

type FooInterface = MyInterface & { myProp: "foo" };
type Foo2Interface = MyInterface & { myProp2: "foo2" };

type Identity<T> = T;
type SomeMappedType<T> = Identity<{ [k in keyof T] : [T[k]] }>

interface Bar {
  bar<T extends FooInterface & Foo2Interface>(t: T, m : SomeMappedType<T>): void;
}

class Impl implements Bar {
bar<T extends MyInterface&{ myProp: "foo"; }&{ myProp2: "foo2"; }>(t: T,m: { [k in keyof T]: [T[k]]; }): void {
throw new Error("Method not implemented.");
}
  
}

Playground
对于我的用例,我期望得到的是:

replaceMany<TableT extends InsertableTable & DeletableTable> (
        table : TableT,
        rows : readonly [BuiltInInsertRow<TableT>, ...BuiltInInsertRow<TableT>[]]
    ) : Promise<ReplaceManyResult>;

但实际上得到的是:

replaceMany<TableT extends tsql.ITable<tsql.TableData> & {insertEnabled: true;} & {deleteEnabled: true;}>(table: TableT, rows: readonly [{readonly [columnAlias in Exclude<TableT["columns"] extends tsql.ColumnMap ? Extract<keyof TableT["columns"], string> : never, TableT["generatedColumns"][number] | TableT["nullableColumns"][number] | TableT["explicitDefaultValueColumns"][number] | TableT["autoIncrement"]>]: tsql.BuiltInExpr_NonCorrelated<ReturnType<TableT["columns"][columnAlias]["mapper"]>>;} & {readonly [columnAlias in tsql.TableUtil.OptionalColumnAlias<TableT>]?: tsql.BuiltInExpr_NonCorrelatedOrUndefined<ReturnType<TableT["columns"][columnAlias]["mapper"]>>;}, ...({readonly [columnAlias in Exclude<TableT["columns"] extends tsql.ColumnMap ? Extract<keyof TableT["columns"], string> : never, TableT["generatedColumns"][number] | TableT["nullableColumns"][number] | TableT["explicitDefaultValueColumns"][number] | TableT["autoIncrement"]>]: tsql.BuiltInExpr_NonCorrelated<ReturnType<TableT["columns"][columnAlias]["mapper"]>>;} & {readonly [columnAlias in tsql.TableUtil.OptionalColumnAlias<TableT>]?: tsql.BuiltInExpr_NonCorrelatedOrUndefined<ReturnType<TableT["columns"][columnAlias]["mapper"]>>;})[]]): Promise<tsql.ReplaceManyResult> {
ttvkxqim

ttvkxqim3#

看起来@Tyriar的原始示例在TS 3.7.5中已固定
@AnyhowStep的示例仍然扩展了类型

相关问题