Wpis z mikrobloga

Lubię tego nowego #typescript fajną magię można zrobić używając Template Literal Types.


interface ExampleType {
test: string;
a: number;
b: Date;
}

type ChangeLiteral = Type |
${Type} as ${X};

class Example {
public select(field: ChangeLiteral): Record {
// Here a logic
return {} as any;
}
}

const p = new Example();
p.select('a as Xa');
p.select('test as g');
p.select('testa as '); // Fail: missing prop
p.select('test ass'); // Fail: 'as' expected

p.select('test as g').g = 'a'; // Ok
p.select('test as g').g = 43; // Fail: Not number
p.select('test as g').s = 's'; // Fail: Not exists

https://www.typescriptlang.org/play?strictPropertyInitialization=false#code/JYOwLgpgTgZghgYwgAgKIA84FsAOAbCAFQE8cUBvAKEgGcwAuZOqUAcwG5K5GQBXLAEbROAxgBE4kTgF9K1UigDCACzghWEADLBIUOHgA8JMsgjpIIACY0mYFuoA0yABqnzEKzeZsAfMgC8yMYoAD7IAAYAJOTB0shwNtHO0uGccgh4CTYY2PgQRm4W1sgA9gIAVhAIYH5UyMg4vAJ4wAhMEATVBq5mRV52bE4AmoUexQDWEMQlMEHIAGS29qw+ABQwwB2WjCpqGtq6+gZDTs4+AJSMAEpVJVCW3chOhADaQwC6tZT19QD0v8gABLQFBwZB4EqsVrfH5QCBgXhQEDIchxBLxEDETj1WSySgIEogOgNALIEAQADuaEwuAIBhytKICjW504OAAdDQOlUwKsAORg9HOOB81mUDlczq8vm0MDxGysUVsznc6r82WCmxK5D-ZAAMTgwDwjCwwBoNDYDSgJRw4pVUvVEGJWW1uoNRsYApofLcZGqEEscglqulsvlyEV53ZrFJAr57B1AIA8uM7ZKeY7nQrRdHSQAWADMCd1+sNxuQADkSnK+IJoGmQ5m5ejI5zY97iwD3eWq3KzGawDRKEA

#programowanie