编辑代码

// http://typescript.jsrun.net/
function foo<T>(arg: T): T {
    return arg
}
// 使用类型推导
let resNum = foo(999)
let resStr = foo('str')
let resObj = foo({
    name: '张三',
    age: 18
})
let resArrStr = foo(['str', 'str'])
let resArrObj = foo([
    {
        name: '李四',
        age: 16
    },
    {
        name: '王五',
        age: 20
    }
])

// 不使用类型推导
interface IObj{
    name: string,
    age: number
}

let resNum1 = foo<number>(777)
let resStr1 = foo<string>('str')
let resObj1 = foo<{
    name: string,
    age: number
}>({ name: '张三', age: 18 })
let resArrStr1 = foo<number[]>([1223, 22])
let resArrObj1 = foo<IObj[]>([
    {
        name: '李四',
        age: 16
    },
    {
        name: '王五',
        age: 20
    }
])