Я новичок в TypeScript и пытаюсь чего-то достичь или даже знать, возможно ли это.
Я хочу иметь возможность определять тип функции, которая позволяет экземплярам функции устанавливать свой собственный тип возвращаемого значения, но в то же время ограничивает этот тип возвращаемого значения как объект, где ключи являются строками, а значения - строками.
Таким образом, определение универсального типа должно разрешать любой возвращаемый тип, соответствующий { [key: string]: string }
, но конкретный экземпляр функции может указывать, что он будет возвращать {a: 'y', b: 'z'}, а затем при использовании возвращаемого значения функции компилятор будет знать, что у него будут только свойства a и b, а не только какие-либо строковые свойства.
type obj = {
name: string,
doAThing: (path: string) => { [key: string]: string }
}
const anObj: obj = {
name: 'Alias Fakename',
doAThing: path => ({ a: 'abc', b: 'xyz' })
}
const result = anObj.functionInstance('abcdef')
В приведенном выше примере doAThing
в anObj
- допустимая реализация genericFunction
. Но при использовании result
компилятор не знает, что он будет иметь только свойства a
и b
, и позволяет использовать любой строковый ключ, например. result.keyWhichDoesntExist
не вызывает ошибку типа.
Есть ли способ при определении doAThing
в anObj
указать его тип возвращаемого значения, чтобы подсказка типа работала с result
, обеспечивая при этом соответствие указанного типа возвращаемого значения типу возврата genericFunction
?