У меня есть метод с двумя аргументами, и я хочу, чтобы он выводил тип из первого аргумента.
Например, в следующем коде я хочу, чтобы тип T
функции create_C<T>
выводился из firstArgument
, чтобы возвращаемый тип create_C
функции был C<type inferred from firstArgument>
interface C<T> {
firstArgument: A<T>;
secondArgument: (obj: any) => T
}
export interface A<T> {
type: T;
}
function create_C<T>(
firstArgument: A<T>,
secondArgument: (obj: any) => T
): C<T> {
return {
firstArgument,
secondArgument
}
}
Однако в следующей реализации тип const c
определяется как C<{ prop2: number }>
. Но я ожидаю, что он будет выведен как C<B>
, и я ожидаю, что компилятор выдаст ошибку, говоря, что тип возвращаемого значения secondArgument
не относится к типу B
interface B {
prop1: string;
prop2: number
}
export class B_Component implements A<B> {
type: B = {
prop1: "",
prop2: 1
};
}
const c = create_C(
new B_Component(),
() => ({ prop2: 2 })
)
Как я могу убедиться, что компилятор выдает ошибку, говоря, что тип возвращаемого значения secondArgument
не относится к типу B
?
Вот ссылка на редактор Stackblitz: https://stackblitz.com/edit/qqddsn
create_C
вот так ?:create_C<B_Component>()
. Вы вводите функцию с помощью общего, и все выглядит хорошо, просто нужно передать правильный тип T, когда вы его вызываете ... - person MrRobboto   schedule 26.11.2019create_C
вызов был ошибкой? Обратный вызов, переданный как второй параметр, не возвращаетB
, он возвращает{prop2: number}
, поэтомуc
- этоC<{prop2: number}>
. Почему бы не вернуть фактическийB
в обратном вызове? - person jcalz   schedule 26.11.2019() => ({ prop2: 2 })
не соответствует тому, что вы вводите с помощьюsecondArgument: (obj: any) => T
- person MrRobboto   schedule 26.11.2019create_C
отображал ошибку, говорящую о том, что обратный вызов, переданный как второй параметр, не возвращает B. Я хочу, чтобы пользователь, который передает второй аргумент, возвращал B. И если это не так, Я хочу, чтобы типограф на него кричал с ошибкой. - person prudhvi   schedule 26.11.2019B_Component
теперь изменено на свойство с именемtype
, которое является частью интерфейсаA<B>
- person prudhvi   schedule 26.11.2019