在JavaScript我们通常会使用到可串联(Chainable/Pipline)的函数构造一个对象,但是在Typescript中,你能合理地给它赋上类型吗?
题目是: 可以使用任何你喜欢的方式实现这个类型 - interface, type, 或者 class 都行。你需要提供两个函数
option(key, value)
和get()
在
option
中你需要使用提供的key和value来扩展当前的对象类型,通过get()
获取最终结果。
注意: 你只需要在类型层面实现这个功能 - 不需要实现任何 ts/js 的实际逻辑。 你可以假设key
只接受字符串而value
接受任何类型,你只需要暴露它传递的类型而不需要进行任何处理。同样的key
只会被使用一次。
例子是:
declare const config: Chainable
const result = config.option('foo', 123).option('bar', { value: 'Hello World' }).option('name', 'type-challenges').get()// expect the type of the result to be:
interface Result {foo: numbername: stringbar: {value: string}
}
答案
type Chainable = {option(key: string, value: any): anyget(): an